|
18317
|
793
|
13
|
2026-05-11T11:10:57.894366+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497857894_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeWindowFV faVsco.js°9 JY-2 PhostormVIewINavicareCodeWindowFV faVsco.js°9 JY-20725-handle-HS-search-rate-linroledey© BatchSyncCollectolC) CachedCrmServiceDecorator.ongDeleteCrmEntityTrait.phpe balchsynckealssec clientone© ClosedDealStagesS © RateLimitExcepDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspot Tokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service.onrC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Acceccors• D ConfigD DTO> M SiltersJobs• M ProcnectSoarchStreW service lralts© DataClient.php© DecorateActivity.ph(e)LocalSearch.onpu Localsearchinteria© RemoteSearch.phpc) Service.phpv W Listeners© ConvertLeadActivitc) PurceLookuocache> M Metadata> Miaration> = Pioedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpTacts naccod. 12 (todav 12:02class Client extends Basecllent impLements HubspotcllentintertaceSthis->executeRequest(fn • => $this->getNewInstance@->crm0->...);* atemplate T* apanam callable: T $apiCall* drexurn* ochrows kateL1m1ctxcepczonorivate function executeRequestcallable SapicaloScachekev = sthis->qetRateLim1tcacheKevo:ScachedRetrvAfter = Redis:.det Scachekev):1+ us strino scachedRetrvAfter) vx 1s numericScachedRetrvAfter)) <throw new RateLimitExcentiong'Hubspot rate limit (cached circuit-breaker)',Gint) ScachedRetrvAfter.tryneturn Canicalld} catch (Throwable $e) {if (Sthis->isHubspotRateLimit(Se)) {SretryAfter = Sthis->parseRetryAfter($e):Redis::setex($cacheKey, SretryAfter, (string) $retryAfter):Sthis->loq->warning('[Hubspot] Received 429 from API'. [ttoom idl= sth1s->cont10->team1d'config id'=> Sthis->config->qetIdO."retry after' => Sretrvafter.= Sthis-›parseMessage(Se).=> $e->qetMessage@.throw new RateLimitExcention( message: 'Hubspot returned 429' SretrvAfter. Se):throw Se:lucaneHudspol/serwice.pnpProviderkateLimiter.phgA2/67 V3 AMI / 1011THH1l I11Preparation tor kerl…. In oum100% 1• Mon 11 May 14:10:57= custom.loglaravel.log&console [pRODIA console [EUiconsole [STAGINGICc W.*11: 08:4511local.INFO: Jiminny \Console\Commands\Command::run Memory usage before starting command 1"command": "mailbox:batch:retry-failed", "memoryBeforecon11: 08:451111•08•467|local.INFO: Jiminny \Console\Commands \Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_config11•09•121|local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_i11[PHONE]1 INEO. AsvnclndateSlasticSeanch Entity added to Redis Zist "entityIyne" "activities" "entityId" :615092"welueeelolnKevmomnopeenelelen11•00•121local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_idSocialAccountCenvicol Cetchina token «icocialAcolocal.INF0: [SocialAccountService] Token retrieved {"socialAccountId":1499,"pr11:09:12] local.INF0: [EncryptedTokenManager] Generating access toker11.07.121Local. Inru.urmuwnerkesolver Incegracion owner macched as ukn uwner crn oroowner":148,"team_id":2} {"correlation id":"f33d11:09:120[Prospect match] Cache miss11:09:13]local.INF0: [Hubspot] Failed to fetch contact {"email":"nikolay.nikolov@jimin11:09:151local.INFO: [Prospect match] API returned empty11:04:15|10:09:1501Local.WARNING: HUbSpOt NOlocal.WARNING: [Hubspotl ReceivedExceptionsBadRequest" "me'POST httos://aoi.huerror", "message":"You nave reached11: 09:131Local.INFO:HandLeHubspotRateLimit Rate Limit11:09:14J11: 09:141111: 09:14111: 09:141Matchactivitvirmbatal11: 09 :14Local. INFO:[SocialAccountService][SocialAccountServicel11: 09:147local. TNFO:[EncryptedTokenManager] Generating access token"crm ownen":148 "team id":2, "correlation id"."ccafi11: 09:147|Zocal. TNFO.[Prospect match] Cache / local search hitrrelation_id":"ccaf.11• 00 • 1411Pracnect matchll cached emntv necul+ny neyt matchina method uidentifien tvnoll."lemanl" "identifionl."nikolav nakolovd"11 • 00 • 1/7local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny \Jobs\\Crm\\MatchActivityCrmData","attempts"::MatchActivitvêrmhatal Stantina CPM data matchina Siactivity".4143821mote seanchitoup "cet confiaunation".? "old ctato".S"lead idi»nì11• 09•141local.INF0: [ EsUpdateTarget ] Update single target {"target":"activities" "purpose":"searchable-observer-update" "entityId":614382} {"correlation i"AcvnclindateFlacticSeanch l Entitv added to Pedic lic+ SientitvTvnel.llactivitioci lentitvTdi.41438211• 09•141local.INF0: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead idҐSocialAccountSenvicel Fotchina token SicocialAccounttd".1400local.INF0: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provlocal.INF0: [EncryptedTokenManager] Generating access tokerLocatner umuwnerkesol ver incegamon owner marched as ki uwer "com provder" "nuospor "com owner"H14o, tea11:09:14] local.INF0: [Prospect match] Cache / local search hit {"identifier11:09:141 local.INF0: [Prospect matchl cached empty result - no APT calls. try next matching method {"identifier type"."email" "identifier"."nikolTuondlolnbeno+Dotol &md+11:09:141LocaL.INF0: Matchactzvityci11: 09:141Asvncuodate.l10: 09 :14110: 09 :141LocaLINFO:SoctalAccounts11: 09 • 14111: 09•147Local. TNFO:lEncrvotedTokeni11: 09:141 Local. TNF0CrmOwnerResolv...
|
NULL
|
-8548818504029116669
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeWindowFV faVsco.js°9 JY-2 PhostormVIewINavicareCodeWindowFV faVsco.js°9 JY-20725-handle-HS-search-rate-linroledey© BatchSyncCollectolC) CachedCrmServiceDecorator.ongDeleteCrmEntityTrait.phpe balchsynckealssec clientone© ClosedDealStagesS © RateLimitExcepDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspot Tokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service.onrC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Acceccors• D ConfigD DTO> M SiltersJobs• M ProcnectSoarchStreW service lralts© DataClient.php© DecorateActivity.ph(e)LocalSearch.onpu Localsearchinteria© RemoteSearch.phpc) Service.phpv W Listeners© ConvertLeadActivitc) PurceLookuocache> M Metadata> Miaration> = Pioedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpTacts naccod. 12 (todav 12:02class Client extends Basecllent impLements HubspotcllentintertaceSthis->executeRequest(fn • => $this->getNewInstance@->crm0->...);* atemplate T* apanam callable: T $apiCall* drexurn* ochrows kateL1m1ctxcepczonorivate function executeRequestcallable SapicaloScachekev = sthis->qetRateLim1tcacheKevo:ScachedRetrvAfter = Redis:.det Scachekev):1+ us strino scachedRetrvAfter) vx 1s numericScachedRetrvAfter)) <throw new RateLimitExcentiong'Hubspot rate limit (cached circuit-breaker)',Gint) ScachedRetrvAfter.tryneturn Canicalld} catch (Throwable $e) {if (Sthis->isHubspotRateLimit(Se)) {SretryAfter = Sthis->parseRetryAfter($e):Redis::setex($cacheKey, SretryAfter, (string) $retryAfter):Sthis->loq->warning('[Hubspot] Received 429 from API'. [ttoom idl= sth1s->cont10->team1d'config id'=> Sthis->config->qetIdO."retry after' => Sretrvafter.= Sthis-›parseMessage(Se).=> $e->qetMessage@.throw new RateLimitExcention( message: 'Hubspot returned 429' SretrvAfter. Se):throw Se:lucaneHudspol/serwice.pnpProviderkateLimiter.phgA2/67 V3 AMI / 1011THH1l I11Preparation tor kerl…. In oum100% 1• Mon 11 May 14:10:57= custom.loglaravel.log&console [pRODIA console [EUiconsole [STAGINGICc W.*11: 08:4511local.INFO: Jiminny \Console\Commands\Command::run Memory usage before starting command 1"command": "mailbox:batch:retry-failed", "memoryBeforecon11: 08:451111•08•467|local.INFO: Jiminny \Console\Commands \Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_config11•09•121|local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_i11[PHONE]1 INEO. AsvnclndateSlasticSeanch Entity added to Redis Zist "entityIyne" "activities" "entityId" :615092"welueeelolnKevmomnopeenelelen11•00•121local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_idSocialAccountCenvicol Cetchina token «icocialAcolocal.INF0: [SocialAccountService] Token retrieved {"socialAccountId":1499,"pr11:09:12] local.INF0: [EncryptedTokenManager] Generating access toker11.07.121Local. Inru.urmuwnerkesolver Incegracion owner macched as ukn uwner crn oroowner":148,"team_id":2} {"correlation id":"f33d11:09:120[Prospect match] Cache miss11:09:13]local.INF0: [Hubspot] Failed to fetch contact {"email":"nikolay.nikolov@jimin11:09:151local.INFO: [Prospect match] API returned empty11:04:15|10:09:1501Local.WARNING: HUbSpOt NOlocal.WARNING: [Hubspotl ReceivedExceptionsBadRequest" "me'POST httos://aoi.huerror", "message":"You nave reached11: 09:131Local.INFO:HandLeHubspotRateLimit Rate Limit11:09:14J11: 09:141111: 09:14111: 09:141Matchactivitvirmbatal11: 09 :14Local. INFO:[SocialAccountService][SocialAccountServicel11: 09:147local. TNFO:[EncryptedTokenManager] Generating access token"crm ownen":148 "team id":2, "correlation id"."ccafi11: 09:147|Zocal. TNFO.[Prospect match] Cache / local search hitrrelation_id":"ccaf.11• 00 • 1411Pracnect matchll cached emntv necul+ny neyt matchina method uidentifien tvnoll."lemanl" "identifionl."nikolav nakolovd"11 • 00 • 1/7local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny \Jobs\\Crm\\MatchActivityCrmData","attempts"::MatchActivitvêrmhatal Stantina CPM data matchina Siactivity".4143821mote seanchitoup "cet confiaunation".? "old ctato".S"lead idi»nì11• 09•141local.INF0: [ EsUpdateTarget ] Update single target {"target":"activities" "purpose":"searchable-observer-update" "entityId":614382} {"correlation i"AcvnclindateFlacticSeanch l Entitv added to Pedic lic+ SientitvTvnel.llactivitioci lentitvTdi.41438211• 09•141local.INF0: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead idҐSocialAccountSenvicel Fotchina token SicocialAccounttd".1400local.INF0: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provlocal.INF0: [EncryptedTokenManager] Generating access tokerLocatner umuwnerkesol ver incegamon owner marched as ki uwer "com provder" "nuospor "com owner"H14o, tea11:09:14] local.INF0: [Prospect match] Cache / local search hit {"identifier11:09:141 local.INF0: [Prospect matchl cached empty result - no APT calls. try next matching method {"identifier type"."email" "identifier"."nikolTuondlolnbeno+Dotol &md+11:09:141LocaL.INF0: Matchactzvityci11: 09:141Asvncuodate.l10: 09 :14110: 09 :141LocaLINFO:SoctalAccounts11: 09 • 14111: 09•147Local. TNFO:lEncrvotedTokeni11: 09:141 Local. TNF0CrmOwnerResolv...
|
18312
|
NULL
|
NULL
|
NULL
|
|
18316
|
792
|
15
|
2026-05-11T11:10:57.910799+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497857910_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplalnPreparation for Refi... in 50 mDEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)883Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5100% <78• Mon 11 May 14:10:57181-zsh+screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
NULL
|
-5844766314848603347
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplalnPreparation for Refi... in 50 mDEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)883Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5100% <78• Mon 11 May 14:10:57181-zsh+screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
18315
|
NULL
|
NULL
|
NULL
|
|
18319
|
793
|
14
|
2026-05-11T11:11:01.351474+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497861351_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-h PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-Iiyroledey© BatchSyncCollectole balchsynckealssec clientone© ClosedDealStagesS © RateLimitExceDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspot Tokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service.onrC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM AcceccorsConfigD DTO> M SiltersJobs• M ProcnectSoarchStreW service lralts© DataClient.php© DecorateActivity.ph(e)LocalSearch.onpu Localsearchinteria© RemoteSearch.phpc) Service.phpv W Listenersc) ConvertLeadActivitc) PurceLookuocache> M Metadata> Miarationa Pioedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phplucaneTacts naccod. 12 (todav 12:02WindowC) CachedCrmServiceDecorator.ongT DeleteCrmEntityTrait.phpclass Client extends Basecllent impLements HubspotcllentintertaceSthis->executeRequest(fn • => $this->getNewInstance@->crm0->...);* atemplate T* apanam callable: T $apiCall* drexurn* ochrows kateL1m1ctxcepczonorivate function executeRequestcallable SapicaloScachekev = sthis->qetRateLim1tcacheKevo:ScachedRetrvAfter = Redis:.det Scachekev):1+ us strinoscachedRetrvAfter)vx 1s_numericScachedRetrvAfter)) <throw new RateLimitExcentiong'Hubspot rate limit (cached circuit-breaker)',Gint) ScachedRetrvAfter.tryneturn Canicalld} catch (Throwable $e) {if (Sthis->isHubspotRateLimit(Se)) {SretryAfter = $this->parseRetryAfter($e);Redis::setex($cacheKey, SretryAfter, (string) $retryAfter):Sthis->loq->warning('[Hubspot] Received 429 from API'. [ttoom idl= sth1s->cont10->team1d'config id'=> Sthis->config->qetIdO."retry after' => Sretrvafter= Sthis-›parseMessage(Se).= Se->qetMessageorthrow new RateLimitExcention( message: 'Hubspot returned 429' SretrvAfter. Se);throw Se:Hudspol/serwice.pnpProviderkateLimiter.phgA2/67 V3 APreparation tor kerl…. In oum100% 1• Mon 11 May 14:11:01&console [pRODlA console [EUiconsole [STAGINGIш 1 шuш1l I11= custom.log=laravel.log XCc W.*11: 08:4511local.INFO: Jiminny \Console\Commands\Command::run Memory usage before starting command 1"command": "mailbox:batch:retry-failed", "memoryBeforecon11: 08:451111•08•467|local.INFO: Jiminny \Console\Commands \Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_config11•09•121|local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_i11[PHONE]1 INEO. AsvnclndateSlasticSeanch Entity added to Redis Zist "entityIyne" "activities" "entityId" :615092"welueeelolnKevmeepeerelelen11•00•121local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_idSocialAccountCenvicol Cetchina token «icocialAcolocal.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"p)11:09:12] local.INF0: [EncryptedTokenManager] Generating access toker11.07.141Local. Inru.urmuwnerkesolver Incegracion owner macched as ukn uwner crnoroowner":148,"team_id":2} {"correlation_ id":"f33d.11:09:120[Prospect match] Cache miss11:04:151local.INF0: [Hubspot] Failed to fetch contact {"email":"nikolay.nikolov@jimin11:04:151local.INF0: [Prospect match] API returned empty result11:04:15|10:09:1501local.WARNING: [Hubspot] Nolocal.WARNING: [Hubspotl ReceivedExceptions\BadRequest""me'POST [URL_WITH_CREDENTIALS] local.INF0: [Prospect matchl cached empty result - no APT calls. try next matching method {"identifier type"."email" "identifier"."nikolTuondlolnbeno+Dotol&md+11: 09:141LocaL.INF0: Matchactzvityci11:09:141111: 09:141Asvncuodate.l10: 09 :14110: 09 :141LocaLINFO:SoctalAccounts11: 09• 14711: 09•147Local.TNF0lEncrvotedTokeni11: 09:141 Local. TNF0CrmOwnerResolv...
|
NULL
|
-7219240454161278196
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-h PhostormVIewINavicareCodeFV faVsco.js°9 JY-20725-handle-HS-search-rate-Iiyroledey© BatchSyncCollectole balchsynckealssec clientone© ClosedDealStagesS © RateLimitExceDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspot Tokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service.onrC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM AcceccorsConfigD DTO> M SiltersJobs• M ProcnectSoarchStreW service lralts© DataClient.php© DecorateActivity.ph(e)LocalSearch.onpu Localsearchinteria© RemoteSearch.phpc) Service.phpv W Listenersc) ConvertLeadActivitc) PurceLookuocache> M Metadata> Miarationa Pioedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phplucaneTacts naccod. 12 (todav 12:02WindowC) CachedCrmServiceDecorator.ongT DeleteCrmEntityTrait.phpclass Client extends Basecllent impLements HubspotcllentintertaceSthis->executeRequest(fn • => $this->getNewInstance@->crm0->...);* atemplate T* apanam callable: T $apiCall* drexurn* ochrows kateL1m1ctxcepczonorivate function executeRequestcallable SapicaloScachekev = sthis->qetRateLim1tcacheKevo:ScachedRetrvAfter = Redis:.det Scachekev):1+ us strinoscachedRetrvAfter)vx 1s_numericScachedRetrvAfter)) <throw new RateLimitExcentiong'Hubspot rate limit (cached circuit-breaker)',Gint) ScachedRetrvAfter.tryneturn Canicalld} catch (Throwable $e) {if (Sthis->isHubspotRateLimit(Se)) {SretryAfter = $this->parseRetryAfter($e);Redis::setex($cacheKey, SretryAfter, (string) $retryAfter):Sthis->loq->warning('[Hubspot] Received 429 from API'. [ttoom idl= sth1s->cont10->team1d'config id'=> Sthis->config->qetIdO."retry after' => Sretrvafter= Sthis-›parseMessage(Se).= Se->qetMessageorthrow new RateLimitExcention( message: 'Hubspot returned 429' SretrvAfter. Se);throw Se:Hudspol/serwice.pnpProviderkateLimiter.phgA2/67 V3 APreparation tor kerl…. In oum100% 1• Mon 11 May 14:11:01&console [pRODlA console [EUiconsole [STAGINGIш 1 шuш1l I11= custom.log=laravel.log XCc W.*11: 08:4511local.INFO: Jiminny \Console\Commands\Command::run Memory usage before starting command 1"command": "mailbox:batch:retry-failed", "memoryBeforecon11: 08:451111•08•467|local.INFO: Jiminny \Console\Commands \Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_config11•09•121|local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_i11[PHONE]1 INEO. AsvnclndateSlasticSeanch Entity added to Redis Zist "entityIyne" "activities" "entityId" :615092"welueeelolnKevmeepeerelelen11•00•121local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_idSocialAccountCenvicol Cetchina token «icocialAcolocal.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"p)11:09:12] local.INF0: [EncryptedTokenManager] Generating access toker11.07.141Local. Inru.urmuwnerkesolver Incegracion owner macched as ukn uwner crnoroowner":148,"team_id":2} {"correlation_ id":"f33d.11:09:120[Prospect match] Cache miss11:04:151local.INF0: [Hubspot] Failed to fetch contact {"email":"nikolay.nikolov@jimin11:04:151local.INF0: [Prospect match] API returned empty result11:04:15|10:09:1501local.WARNING: [Hubspot] Nolocal.WARNING: [Hubspotl ReceivedExceptions\BadRequest""me'POST [URL_WITH_CREDENTIALS] local.INF0: [Prospect matchl cached empty result - no APT calls. try next matching method {"identifier type"."email" "identifier"."nikolTuondlolnbeno+Dotol&md+11: 09:141LocaL.INF0: Matchactzvityci11:09:141111: 09:141Asvncuodate.l10: 09 :14110: 09 :141LocaLINFO:SoctalAccounts11: 09• 14711: 09•147Local.TNF0lEncrvotedTokeni11: 09:141 Local. TNF0CrmOwnerResolv...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18318
|
792
|
16
|
2026-05-11T11:11:01.374832+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497861374_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplalnPreparation for Refi... in 50 m100% <78• Mon 11 May 14:11:01181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)883Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
-4935448659785169043
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplalnPreparation for Refi... in 50 m100% <78• Mon 11 May 14:11:01181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)883Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18320
|
792
|
17
|
2026-05-11T11:11:32.845989+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497892845_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6949267270481944867
|
6378759348859832420
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex...
|
18318
|
NULL
|
NULL
|
NULL
|
|
18321
|
793
|
15
|
2026-05-11T11:11:35.222376+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497895222_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
35
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.57014626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"bounds":{"left":0.58111703,"top":0.07980846,"width":0.077792555,"height":0.015961692},"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66788566,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.67785907,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.68650264,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.69514626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"bounds":{"left":0.7087766,"top":0.079010375,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.734375,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.7430186,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.75166225,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.7603058,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"35","depth":4,"bounds":{"left":0.96210104,"top":0.10933759,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.10774142,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.10774142,"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-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"bounds":{"left":0.4268617,"top":0.10614525,"width":0.5731383,"height":0.89385474},"on_screen":true,"value":"[2026-05-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","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}]...
|
-6484356494691795887
|
-2556523045428524700
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
35
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-...
|
18319
|
NULL
|
NULL
|
NULL
|
|
18322
|
792
|
18
|
2026-05-11T11:11:40.558482+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497900558_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 49 m100% <78• Mon 11 May 14:11:40181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
8073110775621949109
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 49 m100% <78• Mon 11 May 14:11:40181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18323
|
793
|
16
|
2026-05-11T11:11:40.578021+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497900578_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js~%9 JY-20725- PhostormVIewINavicareCodeFV faVsco.js~%9 JY-20725-handle-HS-search-rate-limroledey© BatchSyncCollectore balchsynckealssec clientone© ClosedDealStagess ® RateLimitExceDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspot Tokenman© PayloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Accaccors)ConfigD DTO> M SiltersJobsD ProspectSearchStraW service lralts© DataClient.php© DecorateActivity.pr©LocalSearch.phpu Localsearchinteria© RemoteSearch.phpc) Service.phpv _ Listenersc) ConvertLeadActivitc) PurceLookuocache› D Metadata> 2 Miaration> = Pioedrivev Salesforce• D FieldsM OnnortunitvMatcheOpportunitySyncStrM ProsneetSearchStr.> D ServiceTraitsC) Client nhr© DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.php1 usageTests passed: 13 (today 13:02)Window© CachedCrmServiceDecorator.php* DeleteCrmEntity Trait.phpclass Client extends BaseClient implements HubspotClientInterfaceSthis-›executeRequest(fn () => $this->getNewInstance()->crm()->...);* @template T* Cparam callable(): T $apiCalz* drexurn* ochrows kateLim1ctxceptzonorivate function executeRequestcallable SapicaloScachekev = sthis->qetRatelim1tcachekevo:$cachedRetryAfter = Redis: :get($cacheKey);1+ us strino scachedRetrvAfter) vx 1s numericScachedRetrvAfter)) <throw new RateLimitExcention'Hubspot rate limit (cached circuit-breaker)',Gint) ScachedRetrvAfter.try{return $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {SretryAfter = $this->parseRetryAfter($e);Redis: : setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', I'team id'= sth1s->cont10->team1d'config_id'=> $this->config->getId()."retry after' => SretrvAfter= Sthis-›parseMessage(Se).= Se->qetMessageorthrow new RateLimitException( message: 'Hubspot returned 429', SretryAfter, $e);throw Se:Hudspol/serwice.pnpProviderkateLimiter.phgA2 A67 X3 ^II I1 I111111921$0halPreparation for Refi... in 49 m100% 18• Mon 11 May 14:11:40A console [PROD]A console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650. "workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":63te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStantina CRM data matchina Siactivity".te single target {"target":"activities"och1 Entitv added to Pedic lict fient:Participants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId":1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method f"1 Rate limit caught. releasing iob withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
NULL
|
-7906536091822420027
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeFV faVsco.js~%9 JY-20725- PhostormVIewINavicareCodeFV faVsco.js~%9 JY-20725-handle-HS-search-rate-limroledey© BatchSyncCollectore balchsynckealssec clientone© ClosedDealStagess ® RateLimitExceDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspot Tokenman© PayloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Accaccors)ConfigD DTO> M SiltersJobsD ProspectSearchStraW service lralts© DataClient.php© DecorateActivity.pr©LocalSearch.phpu Localsearchinteria© RemoteSearch.phpc) Service.phpv _ Listenersc) ConvertLeadActivitc) PurceLookuocache› D Metadata> 2 Miaration> = Pioedrivev Salesforce• D FieldsM OnnortunitvMatcheOpportunitySyncStrM ProsneetSearchStr.> D ServiceTraitsC) Client nhr© DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.php1 usageTests passed: 13 (today 13:02)Window© CachedCrmServiceDecorator.php* DeleteCrmEntity Trait.phpclass Client extends BaseClient implements HubspotClientInterfaceSthis-›executeRequest(fn () => $this->getNewInstance()->crm()->...);* @template T* Cparam callable(): T $apiCalz* drexurn* ochrows kateLim1ctxceptzonorivate function executeRequestcallable SapicaloScachekev = sthis->qetRatelim1tcachekevo:$cachedRetryAfter = Redis: :get($cacheKey);1+ us strino scachedRetrvAfter) vx 1s numericScachedRetrvAfter)) <throw new RateLimitExcention'Hubspot rate limit (cached circuit-breaker)',Gint) ScachedRetrvAfter.try{return $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {SretryAfter = $this->parseRetryAfter($e);Redis: : setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', I'team id'= sth1s->cont10->team1d'config_id'=> $this->config->getId()."retry after' => SretrvAfter= Sthis-›parseMessage(Se).= Se->qetMessageorthrow new RateLimitException( message: 'Hubspot returned 429', SretryAfter, $e);throw Se:Hudspol/serwice.pnpProviderkateLimiter.phgA2 A67 X3 ^II I1 I111111921$0halPreparation for Refi... in 49 m100% 18• Mon 11 May 14:11:40A console [PROD]A console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650. "workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":63te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStantina CRM data matchina Siactivity".te single target {"target":"activities"och1 Entitv added to Pedic lict fient:Participants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId":1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method f"1 Rate limit caught. releasing iob withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18324
|
792
|
19
|
2026-05-11T11:11:45.541769+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497905541_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","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}]...
|
5685266402682420683
|
-8926130836387591936
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 49 m100% <78• Mon 11 May 14:11:45181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
18322
|
NULL
|
NULL
|
NULL
|
|
18325
|
793
|
17
|
2026-05-11T11:11:45.562220+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497905562_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","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}]...
|
1579713784452094674
|
-8780890023316608054
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
PhostormProjectVIewINavicareCodeFV faVsco.js%9 JY-20725-handle-HS-search-rate-limi© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitExcepDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman118© PayloadBuilder.php119C) Remotecrmobiectn120© ResponseNormalize121c) Service.onr122© SyncFieldAction.ph123C) SvncRelatedActivit124C) WebhookSvncBatcl125v MintearationAor126M Acceccors127128129class Client extends BaseClient implements HubspotClientInterfaceououc tunction 1shubspotrateuimithrowable se: 000ConfigD DTO› D Filters130Jobs> D ProspectSearchStra132133W service lralts© DataClient.php134© DecorateActivity.pr135© LocalSearch.php136© LocalSearchinterfar137© RemoteSearch.php138139c) Service.php1401v D Listeners© ConvertLeadActivit141c) PurceLookuocache142› D Metadata> Miarationi144> D Pipedrive145146v Salesforce• D Fields147M OnnortunitvMatche148OpportunitySyncSti149> M ProsnectSearchStr.150› D Service Traits151152C) Client nhr© DecorateActivity.pr153. Delete@biectsTrait154© FieldDefinitions.php155© PayloadBuilder.php156© Profile.php157© QueryBuilder.php158159if (Se instanceof BadRequestII $e instanceof DealApiExceptionSe instanceof ContactAoiExcentionI1 Se instanceof CompanyApiExceptionII $e instanceofGuzzleltto Exceotion ReauestExcentionreturn (int) $e->getCode() === 429;return false;• public function barseRetryAfter(Throwable $e): intif (method_exists($e,method: 'getResponseHeaders')){Sheaders = $e->getResponseHeaders() ?: [];$value = Sheaders ['Retry-After'] ?? Sheaders['retry-after'] ?? null;if (is_array($value)) {Svalue = Svaluelol ?? null:if cio numerdo(svaluve)) +return (int) svalue:Smessage = strtolower (Sthis-›parseMessage(Se));if (str_contains($message, 'daily'») {neturn 600.ir etn cotoin hancago, en ecoaly)return 10;if (otn.contasins (iressage, 'seconty »)return 1:$this->log->warning(' [Hubspot] No retry-after header or known message, using default', ['exception_class' => get_class($e),Imoccanol => SmessadelI):Tests passed: 13 (today 13:02)Hudspol/serwice.pnpProviderkateLimiter.phgA2 A67 X3 ^nututTH21I III$0halPreparation for Refi... in 49 m100% 18• Mon 11 May 14:11:45A console [PROD]A console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":63te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId" :1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target ""target":"activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"och1 Entitv added to Pedic lict fient:Participants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId":1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method f"1 Rate limit caught. releasing iob withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."leoaaration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
18323
|
NULL
|
NULL
|
NULL
|
|
18327
|
793
|
18
|
2026-05-11T11:11:49.387572+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497909387_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.57014626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"bounds":{"left":0.58111703,"top":0.07980846,"width":0.077792555,"height":0.015961692},"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66788566,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.67785907,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.68650264,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.69514626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"bounds":{"left":0.7087766,"top":0.079010375,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.734375,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.7430186,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.75166225,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.7603058,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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}]...
|
-6538278410563453966
|
6378759348926941284
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18326
|
792
|
20
|
2026-05-11T11:11:49.402777+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497909402_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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}]...
|
5857814237119292699
|
6378759348926941284
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18328
|
792
|
21
|
2026-05-11T11:11:52.366271+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497912366_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5023331182739006308
|
6378759348859832420
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line...
|
18326
|
NULL
|
NULL
|
NULL
|
|
18329
|
793
|
19
|
2026-05-11T11:11:52.371575+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497912371_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.57014626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"bounds":{"left":0.58111703,"top":0.07980846,"width":0.077792555,"height":0.015961692},"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66788566,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.67785907,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.68650264,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.69514626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5519104527307231019
|
6378757149836576868
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace...
|
18327
|
NULL
|
NULL
|
NULL
|
|
18330
|
792
|
22
|
2026-05-11T11:12:04.512325+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497924512_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false}]...
|
3072593486201138013
|
6378757149903685732
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18331
|
793
|
20
|
2026-05-11T11:12:04.512968+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497924512_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6964831806923742495
|
6378757149836576868
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18333
|
793
|
21
|
2026-05-11T11:12:07.900130+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497927900_m2.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.p Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
100
100
'message' => $this->parseMessage($e),
'message' => $this->parseMessage($e),
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
143
143
$message = strtolower($this->parseMessage($e));
$message = strtolower($this->parseMessage($e));
Merge Usages from the Same Line
Show Read Access
Show Write Access
Show Results In Generated Code
Show Import Statements
Show $this/self references
Show Options
Preview Source
Project Files
Usages
Settings…
Services/Crm/Hubspot/Client.php
Method \Jiminny\Services\Crm\Hubspot\Client.parseMessage Client .../app/Services/Crm/Hubspot
2 usages
Open in Find Tool Window...
|
[{"role":"AXCell","text":& [{"role":"AXCell","text":"Crm/Hubspot/Client.php, class","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"Crm/Hubspot/Client.php, class","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"100","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"100","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"'message' => $this->parseMessage($e),","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"'message' => $this->parseMessage($e),","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"Crm/Hubspot/Client.php, class","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"Crm/Hubspot/Client.php, class","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"143","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"143","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"$message = strtolower($this->parseMessage($e));","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"$message = strtolower($this->parseMessage($e));","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Merge Usages from the Same Line","depth":2,"bounds":{"left":0.1456117,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Read Access","depth":2,"bounds":{"left":0.15425532,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Write Access","depth":2,"bounds":{"left":0.16289894,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Results In Generated Code","depth":2,"bounds":{"left":0.17154256,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Import Statements","depth":2,"bounds":{"left":0.18018617,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show $this/self references","depth":2,"bounds":{"left":0.1888298,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Options","depth":2,"bounds":{"left":0.1974734,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Preview Source","depth":2,"bounds":{"left":0.20844415,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Project Files","depth":2,"bounds":{"left":0.21708776,"top":0.47406226,"width":0.03557181,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Usages","depth":1,"bounds":{"left":0.3706782,"top":0.4764565,"width":0.015292553,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Settings…","depth":2,"bounds":{"left":0.38863033,"top":0.47406226,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Services/Crm/Hubspot/Client.php","depth":1,"bounds":{"left":0.14727394,"top":0.5403033,"width":0.0631649,"height":0.013567438},"on_screen":true,"help_text":"Services/Crm/Hubspot/Client.php","role_description":"text"},{"role":"AXStaticText","text":"Method \\Jiminny\\Services\\Crm\\Hubspot\\Client.parseMessage Client .../app/Services/Crm/Hubspot","depth":1,"bounds":{"left":0.14727394,"top":0.4517159,"width":0.20611702,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2 usages","depth":1,"bounds":{"left":0.36768618,"top":0.4517159,"width":0.018284574,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Open in Find Tool Window","depth":2,"bounds":{"left":0.38863033,"top":0.44852355,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7385985519245525894
|
-4049484209358070896
|
click
|
accessibility
|
NULL
|
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.p Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
100
100
'message' => $this->parseMessage($e),
'message' => $this->parseMessage($e),
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
143
143
$message = strtolower($this->parseMessage($e));
$message = strtolower($this->parseMessage($e));
Merge Usages from the Same Line
Show Read Access
Show Write Access
Show Results In Generated Code
Show Import Statements
Show $this/self references
Show Options
Preview Source
Project Files
Usages
Settings…
Services/Crm/Hubspot/Client.php
Method \Jiminny\Services\Crm\Hubspot\Client.parseMessage Client .../app/Services/Crm/Hubspot
2 usages
Open in Find Tool Window...
|
18331
|
NULL
|
NULL
|
NULL
|
|
18332
|
792
|
23
|
2026-05-11T11:12:07.918+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497927918_m1.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.p Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
100
100
'message' => $this->parseMessage($e),
'message' => $this->parseMessage($e),
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
143
143
$message = strtolower($this->parseMessage($e));
$message = strtolower($this->parseMessage($e));
Merge Usages from the Same Line
Show Read Access
Show Write Access
Show Results In Generated Code
Show Import Statements
Show $this/self references
Show Options
Preview Source
Project Files
Usages
Settings…
Services/Crm/Hubspot/Client.php
Method \Jiminny\Services\Crm\Hubspot\Client.parseMessage Client .../app/Services/Crm/Hubspot
2 usages...
|
[{"role":"AXCell","text":& [{"role":"AXCell","text":"Crm/Hubspot/Client.php, class","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"Crm/Hubspot/Client.php, class","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"100","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"100","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"'message' => $this->parseMessage($e),","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"'message' => $this->parseMessage($e),","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"Crm/Hubspot/Client.php, class","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"Crm/Hubspot/Client.php, class","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"143","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"143","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXCell","text":"$message = strtolower($this->parseMessage($e));","depth":4,"on_screen":false,"role_description":"cell"},{"role":"AXStaticText","text":"$message = strtolower($this->parseMessage($e));","depth":5,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Merge Usages from the Same Line","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Read Access","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Write Access","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Results In Generated Code","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Import Statements","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show $this/self references","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Options","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Preview Source","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Project Files","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Usages","depth":1,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Settings…","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Services/Crm/Hubspot/Client.php","depth":1,"on_screen":true,"help_text":"Services/Crm/Hubspot/Client.php","role_description":"text"},{"role":"AXStaticText","text":"Method \\Jiminny\\Services\\Crm\\Hubspot\\Client.parseMessage Client .../app/Services/Crm/Hubspot","depth":1,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2 usages","depth":1,"on_screen":true,"role_description":"text"}]...
|
-7202325251088083724
|
-3040678442585515120
|
click
|
accessibility
|
NULL
|
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.p Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
100
100
'message' => $this->parseMessage($e),
'message' => $this->parseMessage($e),
Crm/Hubspot/Client.php, class
Crm/Hubspot/Client.php, class
143
143
$message = strtolower($this->parseMessage($e));
$message = strtolower($this->parseMessage($e));
Merge Usages from the Same Line
Show Read Access
Show Write Access
Show Results In Generated Code
Show Import Statements
Show $this/self references
Show Options
Preview Source
Project Files
Usages
Settings…
Services/Crm/Hubspot/Client.php
Method \Jiminny\Services\Crm\Hubspot\Client.parseMessage Client .../app/Services/Crm/Hubspot
2 usages...
|
18330
|
NULL
|
NULL
|
NULL
|
|
18334
|
792
|
24
|
2026-05-11T11:12:09.428758+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497929428_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
35
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"35","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-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"on_screen":true,"value":"[2026-05-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","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}]...
|
-6484356494691795887
|
-2556523045428524700
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
35
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18335
|
793
|
22
|
2026-05-11T11:12:09.428952+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497929428_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
35
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.57014626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"bounds":{"left":0.58111703,"top":0.07980846,"width":0.077792555,"height":0.015961692},"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66788566,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.67785907,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.68650264,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.69514626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"bounds":{"left":0.7087766,"top":0.079010375,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.734375,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.7430186,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.75166225,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.7603058,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"35","depth":4,"bounds":{"left":0.96210104,"top":0.10933759,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.10774142,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.10774142,"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-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"bounds":{"left":0.4268617,"top":0.10614525,"width":0.5731383,"height":0.89385474},"on_screen":true,"value":"[2026-05-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","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}]...
|
-6484356494691795887
|
-2556523045428524700
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
35
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18336
|
792
|
25
|
2026-05-11T11:12:11.075230+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497931075_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5023331182739006308
|
6378759348859832420
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line...
|
18334
|
NULL
|
NULL
|
NULL
|
|
18337
|
793
|
23
|
2026-05-11T11:12:11.096681+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497931096_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 'message' => $this->parseMessage($e),\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($this->parseMessage($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false}]...
|
3072593486201138013
|
6378757149903685732
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$this->log->warning('[Hubspot] Received 429 from API', [
'team_id' => $this->config->team_id,
'config_id' => $this->config->getId(),
'retry_after' => $retryAfter,
'message' => $this->parseMessage($e),
'reason' => $e->getMessage(),
]);
throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
}
throw $e;
}
}
private function getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($this->parseMessage($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}...
|
18335
|
NULL
|
NULL
|
NULL
|
|
18339
|
793
|
24
|
2026-05-11T11:12:13.741903+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497933741_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicarecodeFV faVsco.js%9 JY-20725-h PhostormVIewINavicarecodeFV faVsco.js%9 JY-20725-handle-HS-search-rate-limroledey© BatchSyncCollectore balchsynckealsse© ClosedDealStagesS © RateLimitExcepDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspot lokenmanC) PavloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O AccessorsConfigD DTO> M SiltersD JobsD ProspectSearchStra102W sevice lraits© DataClient.php© DecorateActivity.pr©LocalSearch.phpu LocalSearchintertac© RemoteSearch.phpc) Service.phpv _ Listeners© ConvertLeadActivitc) PurceLookuocache› D Metadata> MiarationPipedrivev Salesforce• D FieldsM OnnortunitvMatcheOpportunitySyncSti117M ProsneetSearchStr.ServiceTraitsC) Client nhr©DecorateActivity.pt. Delete@biectsTrait121© FieldDefinitions.php123© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)© CachedCrmServiceDecorator.phpclass Cllent extends Baseclient 1mpLements Hubspotclientintertaceorivate tunction executerequestcallable saoivauueltry{return $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {Snotnvifton - Sthic-snancoPotnvdfton/Con•Redis: :setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', ['team 1d'= sth1s->cont10->team 10cont10 1d'= $this->config->getId(),"retry after = sretryAtter=> $this->parseMessage|($e),Cascade I Tl= se->qetressaceorCommand 21: 'Hubspot returned 429'. SretrvAfter. Se):throw $e;1 usageprivate function getRateLimitCacheKey(): stringreturn sprintf( format: 'hubspot:ratelimit:portal:%d', $this->config->getId());public function isHubspotRateLimit(Throwable $e): boolif (Se instanceof BadRequestII $e instanceof DealApiExceptionII $e instanceof ContactApiExceptionII Se instanceof CompanyApiExceptionIl Se instanceofbuzzlehtro exceotzon request-xceptzonreturn (ant) Se->qetcode0 === 429%HubSpot/Service.phpProviderkateLimiter.ong=| A2 A67 23 ^1111111$0Preparation for Refi... in 48m100% 1Mon 11 May 14:12:13A console [PROD]A console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"comEntitles Startind Es undate worken "oid":12650."workerlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":615te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jicurned empty result, caching che missfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.". errorivoe":"KAId", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching {"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ Local search hit ("identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStantina CRM data matchina Siactivity".te single target {"target":"activities"rch ] Entity added to Redis list {"ent:Participants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. {"mode":"legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {";1 Rate limit caught.releasing job withStarting CRM data matching {"activity",te single target ""target": "activitles'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetchind token -"socialAccountld":1499Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."leoaaration owner matched as CRM Owner ""objects/contact/search' resulte...
|
NULL
|
-697119328602921120
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicarecodeFV faVsco.js%9 JY-20725-h PhostormVIewINavicarecodeFV faVsco.js%9 JY-20725-handle-HS-search-rate-limroledey© BatchSyncCollectore balchsynckealsse© ClosedDealStagesS © RateLimitExcepDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspot lokenmanC) PavloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O AccessorsConfigD DTO> M SiltersD JobsD ProspectSearchStra102W sevice lraits© DataClient.php© DecorateActivity.pr©LocalSearch.phpu LocalSearchintertac© RemoteSearch.phpc) Service.phpv _ Listeners© ConvertLeadActivitc) PurceLookuocache› D Metadata> MiarationPipedrivev Salesforce• D FieldsM OnnortunitvMatcheOpportunitySyncSti117M ProsneetSearchStr.ServiceTraitsC) Client nhr©DecorateActivity.pt. Delete@biectsTrait121© FieldDefinitions.php123© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)© CachedCrmServiceDecorator.phpclass Cllent extends Baseclient 1mpLements Hubspotclientintertaceorivate tunction executerequestcallable saoivauueltry{return $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {Snotnvifton - Sthic-snancoPotnvdfton/Con•Redis: :setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', ['team 1d'= sth1s->cont10->team 10cont10 1d'= $this->config->getId(),"retry after = sretryAtter=> $this->parseMessage|($e),Cascade I Tl= se->qetressaceorCommand 21: 'Hubspot returned 429'. SretrvAfter. Se):throw $e;1 usageprivate function getRateLimitCacheKey(): stringreturn sprintf( format: 'hubspot:ratelimit:portal:%d', $this->config->getId());public function isHubspotRateLimit(Throwable $e): boolif (Se instanceof BadRequestII $e instanceof DealApiExceptionII $e instanceof ContactApiExceptionII Se instanceof CompanyApiExceptionIl Se instanceofbuzzlehtro exceotzon request-xceptzonreturn (ant) Se->qetcode0 === 429%HubSpot/Service.phpProviderkateLimiter.ong=| A2 A67 23 ^1111111$0Preparation for Refi... in 48m100% 1Mon 11 May 14:12:13A console [PROD]A console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"comEntitles Startind Es undate worken "oid":12650."workerlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":615te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jicurned empty result, caching che missfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.". errorivoe":"KAId", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching {"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ Local search hit ("identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStantina CRM data matchina Siactivity".te single target {"target":"activities"rch ] Entity added to Redis list {"ent:Participants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. {"mode":"legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {";1 Rate limit caught.releasing job withStarting CRM data matching {"activity",te single target ""target": "activitles'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetchind token -"socialAccountld":1499Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."leoaaration owner matched as CRM Owner ""objects/contact/search' resulte...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18338
|
792
|
26
|
2026-05-11T11:12:13.785841+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497933785_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:13181DEV (docker)-zshDOCKERcompiledeventsroutesviews181DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
7679717790808982792
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:13181DEV (docker)-zshDOCKERcompiledeventsroutesviews181DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18341
|
792
|
27
|
2026-05-11T11:12:18.739230+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497938739_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:18181DEV (docker)-zshDOCKERcompiledeventsroutesviews₴81DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
5343700727861454160
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:18181DEV (docker)-zshDOCKERcompiledeventsroutesviews₴81DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0; startejiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
18338
|
NULL
|
NULL
|
NULL
|
|
18340
|
793
|
25
|
2026-05-11T11:12:18.767079+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497938767_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-2 PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-20725-handle-HS-search-rate-limiroledey© TrackAutomatedReportGeneratedEvent.php© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconverteclass Cllent extends Baseclient 1mpLements Hubspotclientintertacee Hubspotclientinterc) Hubspot lokenman© PayloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O AccessorsConfigD DTO> M SiltersD Jobs> D ProspectSearchStra102W service lralts© DataClient.php© DecorateActivity.prc Localsearch.oneu LocalSearchintertac© RemoteSearch.phpc) Service.phpv W Listenersc) ConvertLeadActivitc) PurceLookuocache> Metadata> MiarationO Pipedrivev Salesforce• D FieldsM OnnortunitvMatche116OpportunitySyncSti117M ProsneetSearchStr.Service TraitsC) Client nhr©DecorateActivity.pt. Delete@biectsTrait121© FieldDefinitions.php123© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)orivate tunction executerequestcallable saoivauueltrytreturn $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {SretryAfter = $this->parseRetryAfter(Se);Redis: :setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', ['team 1d'= sth1s->cont10->team 10cont10 1d'= $this->config->getId(),"retry after = sretryatter,= Se->qethessaqeoithrow new RatelimitExcention message:'Hubspot returned 429', SretryAfter, $e);throw $e;1 usagenrivate function getRateLimitCacheKevo• strinoneturn sorintfd formata'hubspot:ratelimit:portal:%d', $this->config->getId());Tusagepublic function isHubspotRateLimit(Throwable Se): boolif ($e instanceof BadRequestII $e instanceof DealApiExceptionII $e instanceof ContactApiExceptionIl Se instanceof CompanyApiExceptionI1 Se instanceof \GuzzleHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;return false:HubSpot/Service.php| A2 A67 X3 A VMII 1I II IIII1 111TII$0halPreparation for Refi... in 48m100% 18• Mon 11 May 14:12:18&console [pRODlA console (EU]A console [STAGING]E laravel.log xs\Command: :run Memory usage before starting command {"comEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":615te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "Legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {";1 Doto 14nd+ couch+releasing job withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticipants old state {"activity":6143Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Owner <"cbjects/contact/search' resulte...
|
NULL
|
-6324609191441562431
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-2 PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-20725-handle-HS-search-rate-limiroledey© TrackAutomatedReportGeneratedEvent.php© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconverteclass Cllent extends Baseclient 1mpLements Hubspotclientintertacee Hubspotclientinterc) Hubspot lokenman© PayloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O AccessorsConfigD DTO> M SiltersD Jobs> D ProspectSearchStra102W service lralts© DataClient.php© DecorateActivity.prc Localsearch.oneu LocalSearchintertac© RemoteSearch.phpc) Service.phpv W Listenersc) ConvertLeadActivitc) PurceLookuocache> Metadata> MiarationO Pipedrivev Salesforce• D FieldsM OnnortunitvMatche116OpportunitySyncSti117M ProsneetSearchStr.Service TraitsC) Client nhr©DecorateActivity.pt. Delete@biectsTrait121© FieldDefinitions.php123© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)orivate tunction executerequestcallable saoivauueltrytreturn $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {SretryAfter = $this->parseRetryAfter(Se);Redis: :setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', ['team 1d'= sth1s->cont10->team 10cont10 1d'= $this->config->getId(),"retry after = sretryatter,= Se->qethessaqeoithrow new RatelimitExcention message:'Hubspot returned 429', SretryAfter, $e);throw $e;1 usagenrivate function getRateLimitCacheKevo• strinoneturn sorintfd formata'hubspot:ratelimit:portal:%d', $this->config->getId());Tusagepublic function isHubspotRateLimit(Throwable Se): boolif ($e instanceof BadRequestII $e instanceof DealApiExceptionII $e instanceof ContactApiExceptionIl Se instanceof CompanyApiExceptionI1 Se instanceof \GuzzleHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;return false:HubSpot/Service.php| A2 A67 X3 A VMII 1I II IIII1 111TII$0halPreparation for Refi... in 48m100% 18• Mon 11 May 14:12:18&console [pRODlA console (EU]A console [STAGING]E laravel.log xs\Command: :run Memory usage before starting command {"comEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":615te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "Legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {";1 Doto 14nd+ couch+releasing job withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticipants old state {"activity":6143Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Owner <"cbjects/contact/search' resulte...
|
18339
|
NULL
|
NULL
|
NULL
|
|
18342
|
792
|
28
|
2026-05-11T11:12:22.863675+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497942863_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:22181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
1048676586980514719
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:22181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18343
|
793
|
26
|
2026-05-11T11:12:22.864940+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497942864_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-2 PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-20725-handle-HS-search-rate-limiroledey© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconverteclass Cllent extends Baseclient 1mpLements Hubspotclientintertacee Hubspotclientinterc) Hubspot lokenmanC) PavloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O AccessorsConfigD DTOD FiltersD JobsD ProspectSearchStra102W service lralts© DataClient.php© DecorateActivity.pr©LocalSearch.phpu LocalSearchintertac© RemoteSearch.phpc) Service.phpv W Listenersc) ConvertLeadActivitc) PurceLookuocache› D Metadata> MiarationO Pipedrivev Salesforce• D FieldsM OnnortunitvMatche116OpportunitySyncSti117M ProsneetSearchStr.Service TraitsC) Client nhr©DecorateActivity.pt. Delete@biectsTrait121© FieldDefinitions.php123© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)orivate tunction executerequestcallable saoivauueltrytreturn $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {SretryAfter = $this->parseRetryAfter($e);Redis: :setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', ['team 1d'= sth1s->cont10->team 10cont10 1d'= $this->config->getId(),retry after = sretryAtter=> $e->qetMessageOllBACAANA 901FI1):Command &lExtract Surroundthrow new RatelimitExcentionn'Hubspot returned 429', SretryAfter, $e);throw $e;1 usagenrivate function getRateLimitCacheKevo• strinoneturn sorintfd formata'hubspot:ratelimit:portal:%d', $this->config->getId());Tusagepublic function isHubspotRateLimit(Throwable Se): boolif ($e instanceof BadRequestII $e instanceof DealApiExceptionII $e instanceof ContactApiExceptionIl Se instanceof CompanyApiExceptionI1 Se instanceof \GuzzleHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;return false:HubSpot/Service.php| A2 A67 X3 A VNNN$0halPreparation for Refi... in 48m100% 18• Mon 11 May 14:12:22&console [pRODIA console (EU]A console [STAGING]E laravel.log xs\Command::run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":61.te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.". errorivoe":"KAIHd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching {"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"och1 Entitv added to Pedic lict fient:Participants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method f"1 Rate limit cauahtreleasing job withStarting CRM data matching {"activity",te single target ""target": "activitles'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetchind token -"socialAccountld":1499Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."leoaaration owner matched as CRM Owner ""objects/contact/search' resulte...
|
NULL
|
1432801083172334174
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-2 PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-20725-handle-HS-search-rate-limiroledey© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconverteclass Cllent extends Baseclient 1mpLements Hubspotclientintertacee Hubspotclientinterc) Hubspot lokenmanC) PavloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O AccessorsConfigD DTOD FiltersD JobsD ProspectSearchStra102W service lralts© DataClient.php© DecorateActivity.pr©LocalSearch.phpu LocalSearchintertac© RemoteSearch.phpc) Service.phpv W Listenersc) ConvertLeadActivitc) PurceLookuocache› D Metadata> MiarationO Pipedrivev Salesforce• D FieldsM OnnortunitvMatche116OpportunitySyncSti117M ProsneetSearchStr.Service TraitsC) Client nhr©DecorateActivity.pt. Delete@biectsTrait121© FieldDefinitions.php123© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)orivate tunction executerequestcallable saoivauueltrytreturn $apiCall();} catch (Throwable $e) €if ($this->isHubspotRateLimit($e)) {SretryAfter = $this->parseRetryAfter($e);Redis: :setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', ['team 1d'= sth1s->cont10->team 10cont10 1d'= $this->config->getId(),retry after = sretryAtter=> $e->qetMessageOllBACAANA 901FI1):Command &lExtract Surroundthrow new RatelimitExcentionn'Hubspot returned 429', SretryAfter, $e);throw $e;1 usagenrivate function getRateLimitCacheKevo• strinoneturn sorintfd formata'hubspot:ratelimit:portal:%d', $this->config->getId());Tusagepublic function isHubspotRateLimit(Throwable Se): boolif ($e instanceof BadRequestII $e instanceof DealApiExceptionII $e instanceof ContactApiExceptionIl Se instanceof CompanyApiExceptionI1 Se instanceof \GuzzleHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;return false:HubSpot/Service.php| A2 A67 X3 A VNNN$0halPreparation for Refi... in 48m100% 18• Mon 11 May 14:12:22&console [pRODIA console (EU]A console [STAGING]E laravel.log xs\Command::run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":61.te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.". errorivoe":"KAIHd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching {"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"och1 Entitv added to Pedic lict fient:Participants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method f"1 Rate limit cauahtreleasing job withStarting CRM data matching {"activity",te single target ""target": "activitles'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetchind token -"socialAccountld":1499Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."leoaaration owner matched as CRM Owner ""objects/contact/search' resulte...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18344
|
792
|
29
|
2026-05-11T11:12:24.788957+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497944788_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","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}]...
|
5685266402682420683
|
-8926130836387591936
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:24181DEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
18342
|
NULL
|
NULL
|
NULL
|
|
18346
|
793
|
27
|
2026-05-11T11:12:29.172860+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497949172_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","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}]...
|
3299086470291663550
|
-8349389703787247352
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
PhostormVIewINavicareCodeWindowFV faVsco.js%9 JY-20725-handle-HS-search-rate-limiroledey© TrackAutomatedReportGeneratedEvent.php© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconverteclass Cllent extends Baseclient 1mpLements Hubspotclientintertacee Hubspotclientinterc) Hubspot lokenmanC) PavloadBuilder.phpC) Remotecrmobiectr© ResponseNormalizec) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O AccessorsConfigD DTOD FiltersD JobsD ProspectSearchStraW service lralts© DataClient.php© DecorateActivity.prc Localsearch.one1031u LocalSearchintertac© RemoteSearch.phpc) Service.phpv W Listenersc) ConvertLeadActivitc) PurceLookuocache> Metadata> MiarationO Pipedrivev Salesforce• D FieldsM OnnortunitvMatche116OpportunitySyncSti117M ProsneetSearchStr.ServiceTraitsC) Client nhr©DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php123© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)orivate tunction executerequestcallable saoivauueltry{return $apiCall();} catch (Throwable $e) {if ($this->isHubspotRate|imit($e)) {$retryAfter = $this->parseRetryAfter($e);Redis: :setex($cacheKey, $retryAfter, (string) $retryAfter);$this->log->warning('[Hubspot] Received 429 from API', ['team 1d'= sth1s->cont10->team 10cont10 1d'= $this->config->getId(),"retry after = sretryAtter= se-›gethessageonthrow new RateLimitException( message:) 'Hubspot returned 429', SretryAfter, $e);throw $e;1 usagenrivate function getRateLimitCacheKevo• strinoneturn sorintfd formata'hubspot:ratelimit:portal:%d', $this->config->getId());Tusagepublic function isHubspotRateLimit(Throwable $e): boolif ($e instanceof BadRequestIl $e instanceof DealApiExceptionII $e instanceof ContactApiExceptionIl Se instanceof CompanyApiExceptionI1 Se instanceof \GuzzleHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;return false:HubSpot/Service.php| A2 A67 X3 A VMI11 MII1TIIMII 1$0halPreparation for Refi... in 48m100% 58• Mon 11 May 14:12:28&console [pRODlA console (EU]A console [STAGING]E laravel.log xs\Command: :run Memory usage before starting command {"comEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":61.te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "Legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {"1 Doto 14nd+ couch+releasing job withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticipants old state {"activity":6143Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generating access token. {"mode". "leo:aration owner matched as CRM Owner <"cbjects/contact/search' resulte...
|
18343
|
NULL
|
NULL
|
NULL
|
|
18345
|
792
|
30
|
2026-05-11T11:12:29.172903+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497949172_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","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}]...
|
3299086470291663550
|
-8349389703787247352
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 mDEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5100% <78• Mon 11 May 14:12:28181-zsh+screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18347
|
792
|
31
|
2026-05-11T11:12:34.250599+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497954250_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
Previous Highlighted Error...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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}]...
|
-964503098742680800
|
-8740352678700184768
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
Previous Highlighted Error
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 mDEV (docker)-zshDOCKERcompiledeventsroutesviews•₴1DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5100% <78• Mon 11 May 14:12:33181-zsh+screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
18345
|
NULL
|
NULL
|
NULL
|
|
18348
|
793
|
28
|
2026-05-11T11:12:34.262229+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497954262_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"}]...
|
7750778324264792027
|
-8740265267525727424
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY-20725-handle-HS-search-rate-limitKeractorTOOISProject© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) Remotecrmobiectr© ResponseNormalize125c) Service.onr127© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM AcceccorsConfig132D DTOD FiltersD JobsProspectSearchStra134135136W sevice lraits© DataClient.php138© DecorateActivity.ph©LocalSearch.php® LocalSearchinterfar© RemoteSearch.php140141142c) Service.phpv D Listeners144© ConvertLeadActivitc) PurceLookuocache146› D Metadata> Miarationia Pioedrive150v Salesforce151• D FieldsM OnnortunitvMatche152OpportunitySyncSti153M ProsneetSearchStr.154• M ServiceTraitcC) Client nhr© DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php1601© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)class Cllent extends Baseclient 1mpLements Hubspotclientintertacenubu1etunction 1shubspotrateuimithrowaole se: 000lII $e instanceof \GuzzleHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;recurn talse• public function barseRetryAfter(Throwable Se): intmethod exastsSe.|'getResponseHeaders')) {Sheaders = $e->getResponseHeaders() ?: [1;svalue = Sheadens|"Retrv-Aften' ? Sheadens"retrv-aften' ? null:if (is_array($value)) €Svalue = Svaluel0l 22 nuleif (is_numeric($value)) {return (int) $valve;Smessage = strtolower ($this->parseMessage($e));if (str_contains($message, 'daily')) {if (str_contains($message, 'ten secondly')) {recurn 10if (str_contains($message, 'secondly')) {return 1Sthis->log->warning(' [Hubspot] No retry-after header or known message, using default', ['exception_class' => get_class($e),1 usagepublic function parseMessage(Throwable $e): stringHudspol/serwice.pnp| A2 A67 X3 A VIII / HIH$0halPreparation for Refi... in 48m100% 18• Mon 11 May 14:12:33&console [pRODIA console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"comEntitles Startind Es undate worker "oid":12650. "workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":615te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target ""target": "activities'rch ] Entity added to Redis list f"entiParticinants old state "'activity":6144Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {";1 Rate limit caught. releasing iob withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18349
|
792
|
32
|
2026-05-11T11:12:41.350555+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497961350_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:40181DEV (docker)-zshDOCKERcompiledeventsroutesviews181DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
-8006928121485343487
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:40181DEV (docker)-zshDOCKERcompiledeventsroutesviews181DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18350
|
793
|
29
|
2026-05-11T11:12:41.387371+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497961387_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY- PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY-20725-handle-HS-search-rate-limiKeractorProject© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalize125c) Service.onr© SyncFieldAction.phC) SvncRelatedActivit127C) WebhookSvncBatclv MintearationAor> O Accessors130ConfigD DTOD FiltersD JobsProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph©LocalSearch.phpu Localsearchinteria© RemoteSearch.php132134135136142c) Service.phpv W Listeners© ConvertLeadActivitc) PurceLookuocache› D Metadata> Miarationa Pioedrivev Salesforce150151• D FieldsM OnnortunitvMatcheOpportunitySyncSti153M ProsneetSearchStr.154• M ServiceTraitcC) Client nhr© DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)class Cllent extends Baseclient 1mpLements Hubspotclientintertacenubu1etunction 1shubspotrateuimithrowaole se: 000lII $e instanceof \GuzzLeHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;recurn talsepubuac function parseRetrvAfterThrowable Se: 1nt1f method existsSe.'getResponseHeaders')) {Sheaders = $e->getResponseHeaders() ?: [1;svalue = Sheadersl'Retry-After'J ?? Sheadersl'retry-after"J ?? null;if (is_array($value)) €Svalue = Svaluel0l 22 nuleif (is_numeric($value)) {return (int) $valve;Smessage = strtolower ($this->$e->getMessage()($e));if (str_contains($message, 'daily')) {if (str_contains($message, 'ten secondly')) {recurn 10if (str_contains($message, 'secondly')) {return 1Sthis->log->warning(' [Hubspot] No retry-after header or known message, using default', I'exception_class' => get_class($e),1 usagepublic function parseMessage(Throwable $e): stringHudspol/serwice.pnp| A2 A67 X3 A VM1/ 1011TII1l 111$0halPreparation for Refi... in 48m100% 58• Mon 11 May 14:12:40&console [pRODIA console (EU]A console [STAGING]E laravel.log >s\Command: :run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command f{"Starting CRM data matching {"activity":te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target *"target":"activities'rch ] Entity added to Redis list f"entiParticinants old state ""activitv:044Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {"1 Rate limit caught. releasing iob withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
NULL
|
6599567422634823440
|
NULL
|
click
|
ocr
|
NULL
|
PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY- PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY-20725-handle-HS-search-rate-limiKeractorProject© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalize125c) Service.onr© SyncFieldAction.phC) SvncRelatedActivit127C) WebhookSvncBatclv MintearationAor> O Accessors130ConfigD DTOD FiltersD JobsProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph©LocalSearch.phpu Localsearchinteria© RemoteSearch.php132134135136142c) Service.phpv W Listeners© ConvertLeadActivitc) PurceLookuocache› D Metadata> Miarationa Pioedrivev Salesforce150151• D FieldsM OnnortunitvMatcheOpportunitySyncSti153M ProsneetSearchStr.154• M ServiceTraitcC) Client nhr© DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)class Cllent extends Baseclient 1mpLements Hubspotclientintertacenubu1etunction 1shubspotrateuimithrowaole se: 000lII $e instanceof \GuzzLeHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;recurn talsepubuac function parseRetrvAfterThrowable Se: 1nt1f method existsSe.'getResponseHeaders')) {Sheaders = $e->getResponseHeaders() ?: [1;svalue = Sheadersl'Retry-After'J ?? Sheadersl'retry-after"J ?? null;if (is_array($value)) €Svalue = Svaluel0l 22 nuleif (is_numeric($value)) {return (int) $valve;Smessage = strtolower ($this->$e->getMessage()($e));if (str_contains($message, 'daily')) {if (str_contains($message, 'ten secondly')) {recurn 10if (str_contains($message, 'secondly')) {return 1Sthis->log->warning(' [Hubspot] No retry-after header or known message, using default', I'exception_class' => get_class($e),1 usagepublic function parseMessage(Throwable $e): stringHudspol/serwice.pnp| A2 A67 X3 A VM1/ 1011TII1l 111$0halPreparation for Refi... in 48m100% 58• Mon 11 May 14:12:40&console [pRODIA console (EU]A console [STAGING]E laravel.log >s\Command: :run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command f{"Starting CRM data matching {"activity":te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target *"target":"activities'rch ] Entity added to Redis list f"entiParticinants old state ""activitv:044Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {"1 Rate limit caught. releasing iob withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
18348
|
NULL
|
NULL
|
NULL
|
|
18352
|
793
|
30
|
2026-05-11T11:12:46.528734+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497966528_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage()($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ Asyn...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage()($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage()($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.57014626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"bounds":{"left":0.58111703,"top":0.07980846,"width":0.077792555,"height":0.015961692},"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66788566,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.67785907,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.68650264,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.69514626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"bounds":{"left":0.7087766,"top":0.079010375,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.734375,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.7430186,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.75166225,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.7603058,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"54","depth":4,"bounds":{"left":0.96210104,"top":0.10933759,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.10774142,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.10774142,"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-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"bounds":{"left":0.4268617,"top":0.10614525,"width":0.5731383,"height":0.89385474},"on_screen":true,"value":"[2026-05-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6096521997372283730
|
-2556523036834395804
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage()($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ Asyn...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18351
|
792
|
33
|
2026-05-11T11:12:46.533130+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497966533_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage()($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ Asyn...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage()($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage()($e));\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"54","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-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"on_screen":true,"value":"[2026-05-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","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}]...
|
6096521997372283730
|
-2556523036834395804
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage()($e));
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ Asyn...
|
18349
|
NULL
|
NULL
|
NULL
|
|
18353
|
792
|
34
|
2026-05-11T11:12:49.492764+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497969492_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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":"HandleHubspotRateLimitTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'HandleHubspotRateLimitTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"54","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-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"on_screen":true,"value":"[2026-05-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","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"}]...
|
8682107944457975172
|
-2556523036834395804
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18354
|
793
|
31
|
2026-05-11T11:12:49.513742+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497969513_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
[{"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-20725-handle-HS-search-rate-limit, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.09541223,"height":0.025538707},"on_screen":true,"help_text":"Git Branch: JY-20725-handle-HS-search-rate-limit","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.82413566,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HandleHubspotRateLimitTest","depth":6,"bounds":{"left":0.8394282,"top":0.019952115,"width":0.076130316,"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 'HandleHubspotRateLimitTest'","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 'HandleHubspotRateLimitTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.49800533,"top":0.17478053,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.50731385,"top":0.17478053,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"67","depth":4,"bounds":{"left":0.51728725,"top":0.17478053,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.52925533,"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.53889626,"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.5462101,"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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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\\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 Illuminate\\Support\\Facades\\Redis;\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\n public function __construct(\n SocialAccountService $socialAccountService,\n HubspotPaginationService $paginationService,\n HubspotTokenManager $tokenManager\n ) {\n parent::__construct($socialAccountService);\n $this->paginationService = $paginationService;\n $this->tokenManager = $tokenManager;\n\n $this->setBaseUrl(self::BASE_URL);\n $this->setVersion(self::MIN_API_VERSION);\n }\n\n /**\n * Reacts to a rate limits (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 $cacheKey = $this->getRateLimitCacheKey();\n\n $cachedRetryAfter = Redis::get($cacheKey);\n if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {\n throw new RateLimitException(\n 'Hubspot rate limit (cached circuit-breaker)',\n (int) $cachedRetryAfter,\n );\n }\n\n try {\n return $apiCall();\n } catch (Throwable $e) {\n if ($this->isHubspotRateLimit($e)) {\n $retryAfter = $this->parseRetryAfter($e);\n\n Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);\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 getRateLimitCacheKey(): string\n {\n return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());\n }\n\n public function isHubspotRateLimit(Throwable $e): bool\n {\n if ($e instanceof BadRequest\n || $e instanceof DealApiException\n || $e instanceof ContactApiException\n || $e instanceof CompanyApiException\n || $e instanceof \\GuzzleHttp\\Exception\\RequestException\n ) {\n return (int) $e->getCode() === 429;\n }\n\n return false;\n }\n\n public 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 $message = strtolower($e->getMessage());\n\n if (str_contains($message, 'daily')) {\n return 600;\n }\n if (str_contains($message, 'ten secondly')) {\n return 10;\n }\n if (str_contains($message, 'secondly')) {\n return 1;\n }\n\n $this->log->warning('[Hubspot] No retry-after header or known message, using default', [\n 'exception_class' => get_class($e),\n 'message' => $message,\n ]);\n\n return 10;\n }\n\n public function parseMessage(Throwable $e): string\n {\n if (! method_exists($e, 'getResponseBody')) {\n return '';\n }\n\n $body = $e->getResponseBody();\n if (is_string($body)) {\n $body = json_decode($body, true) ?? [];\n }\n\n if (! is_array($body)) {\n return '';\n }\n\n return (string) ($body['message'] ?? '');\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 * Execute a search request against HubSpot CRM objects with rate limiting.\n *\n * @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')\n * @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.\n * @return array The search response with 'results', 'total', 'paging' keys\n * @throws RateLimitException When rate limit is hit\n * @throws HubspotException On API errors\n */\n public function search(string $objectType, array $payload): array\n {\n $endpoint = self::BASE_URL . \"/crm/v3/objects/{$objectType}/search\";\n\n return $this->executeRequest(function () use ($endpoint, $payload) {\n $response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);\n\n return $response->toArray();\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->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 return $this->getInstance()->getClient()?->request(\n method: $method,\n endpoint: $endpoint,\n query_string: $queryString\n );\n } else {\n return $this->getInstance()->getClient()->request($method, $endpoint, [\n 'json' => ($payload),\n ]);\n }\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 (RateLimitException $e) {\n// throw $e;\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":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.5575133,"top":0.08060654,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.57014626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"429","depth":4,"bounds":{"left":0.58111703,"top":0.07980846,"width":0.077792555,"height":0.015961692},"on_screen":true,"value":"429","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.66788566,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.67785907,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.68650264,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.69514626,"top":0.07980846,"width":0.00731383,"height":0.017557861},"on_screen":true,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.27027926,"top":1.0,"width":0.00731383,"height":0.0},"on_screen":false,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1/4","depth":4,"bounds":{"left":0.7087766,"top":0.079010375,"width":0.025598405,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.734375,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.7430186,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.75166225,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.7603058,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.97539896,"top":0.07821229,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"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":"54","depth":4,"bounds":{"left":0.96210104,"top":0.10933759,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.9740692,"top":0.10774142,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.98138297,"top":0.10774142,"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-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","depth":4,"bounds":{"left":0.4268617,"top":0.10614525,"width":0.5731383,"height":0.89385474},"on_screen":true,"value":"[2026-05-11 11:08:45] 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\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {\"pid\":72650,\"workerId\":\"\",\"target\":\"activities\"} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:08:46] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"mailbox:batch:retry-failed\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"43b1fb67-9aac-4fc6-9ced-689ecda5c548\",\"trace_id\":\"60028d0e-dcd8-496a-a7ba-3a04b8d646e2\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":615092,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":615092} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":615092,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":615092,\"participants\":[{\"id\":1004102,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1004103,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"nikolay.nikolov@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-1 (truncated...)\n\"} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f33d47cb-76c6-4c27-a641-48cbf69e623d\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614436,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614436} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614436,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614436,\"participants\":[{\"id\":1002751,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002752,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"ccafe863-7885-4971-96fb-87ef6dd4adf3\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614382,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614382} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614382,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614382,\"participants\":[{\"id\":1002632,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002633,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"f00a4506-adfe-4fdc-b932-e6d2bc751fde\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614381,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614381} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614381,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614381,\"participants\":[{\"id\":1002630,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002631,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"36bd73f5-17f9-4f70-8254-2214543c7f8e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":614378,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":6167,\"account_id\":null,\"opportunity_id\":null,\"stage_id\":null}} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":614378} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":614378,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":614378,\"participants\":[{\"id\":1002623,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1002624,\"user_id\":null,\"contact_id\":6167,\"lead_id\":null},{\"id\":1002625,\"user_id\":89,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"nikolay.nikolov@jiminny.com\"} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"a4a3a058-ec22-4f04-bb14-a9bff18ce214\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613840,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613840,\"participants\":[{\"id\":1001764,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001765,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":261} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":299} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613840,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613840,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613840} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613840,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613840,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"b99b7220-24ab-4f53-a05f-887c3c5341bc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] 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\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613833,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613833,\"participants\":[{\"id\":1001750,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001751,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ScheduleBotCommand] Number of activities to be captured: 0 {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"meeting-bot:schedule-bot\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"d86caa21-8980-460b-b2be-88292956cdb3\",\"trace_id\":\"6f80ed90-fa59-444e-a016-33a62019c6a4\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613833,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613833,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613833} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613833,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613833,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ed230e3b-8ded-4591-bfe7-d4ead6f411c1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613827,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613827,\"participants\":[{\"id\":1001734,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001735,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613827,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613827,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613827} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613827,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613827,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d165f8f2-23f6-4f9a-90e7-7b600066818c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613826,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613826,\"participants\":[{\"id\":1001732,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001733,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613826,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613826,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613826} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613826,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613826,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1816f96e-c36b-474a-8f46-bc8c71bb0079\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613820,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613820,\"participants\":[{\"id\":1001721,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001722,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613820,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613820,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613820} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613820,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613820,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"a2b1cf94-6665-4574-a821-fcd845d290dc\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613818,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613818,\"participants\":[{\"id\":1001717,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001718,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613818,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613818,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613818} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613818,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613818,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"7194ba37-7af3-4aa0-80a3-14b38431fd39\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613812,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:16] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613812,\"participants\":[{\"id\":1001705,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001706,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613812,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613812,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613812} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613812,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613812,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"1fe899e0-6ad7-4159-b5f9-6f34b32d31d6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613807,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613807,\"participants\":[{\"id\":1001690,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001691,\"user_id\":null,\"contact_id\":4484,\"lead_id\":null}]} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613807,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4484,\"owner_id\":253} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4484} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4484,\"opportunity_id\":276} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":1.06,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"tsvetomir.banovski@gmail.com\"} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613807,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613807} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613807,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613807,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4484,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"3056d45f-0cd9-4a93-a3df-e55dc6891629\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613806,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613806,\"participants\":[{\"id\":1001688,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001689,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613806,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":253} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613806,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613806} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613806,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613806,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"f5ad2183-f63f-4901-8bf0-bc6fc374aaae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613805,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613805,\"participants\":[{\"id\":1001686,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1001687,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613805,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:17] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613805,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613805} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613805,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613805,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"e6a724a6-dc6e-4440-ab48-641336d6ca17\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613698,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613698,\"participants\":[{\"id\":1001667,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001668,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613698,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613698,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613698} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613698,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613698,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"67158d25-23dc-4314-8813-caa3c43fa3f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613697,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613697,\"participants\":[{\"id\":1001665,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001666,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613697,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613697,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613697} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613697,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:18] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613697,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d2a290e-88e6-494a-91c2-f63f0338f30f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613696,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613696,\"participants\":[{\"id\":1001663,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001664,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613696,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613696,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613696} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613696,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613696,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d1c50e93-0488-4315-a739-f89181b77d87\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613695,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613695,\"participants\":[{\"id\":1001661,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001662,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613695,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613695,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613695} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613695,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613695,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"6dbd1e2c-b89e-47b6-9c2f-d9d7a56b5383\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613694,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613694,\"participants\":[{\"id\":1001659,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1001660,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613694,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613694,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613694} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613694,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:19] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613694,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"cd14d297-e2e1-425f-b745-361ca50df005\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613157,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613157,\"participants\":[{\"id\":1000746,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000747,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613157,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613157,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613157} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613157,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613157,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"ed6d3fa0-08c4-412f-b60d-4582c6dfa704\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613156,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613156,\"participants\":[{\"id\":1000744,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000745,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613156,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613156,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613156} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613156,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613156,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"77af6469-661f-4d4b-b741-a5b059c8b181\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613155,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613155,\"participants\":[{\"id\":1000742,\"user_id\":253,\"contact_id\":null,\"lead_id\":null},{\"id\":1000743,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613155,\"team_id\":2,\"email\":\"preslava.ivanova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613155,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613155} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613155,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613155,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"6cd64b7d-2826-41b3-83e4-000c5cd88462\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":613130,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":613130,\"participants\":[{\"id\":1000693,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000694,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":613130,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":613130,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:20] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":613130} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":613130,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":613130,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"8d0dfbe8-30bd-4332-bf52-762b3a44300b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612924,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612924,\"participants\":[{\"id\":1000290,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000291,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612924,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":19} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":165} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612924,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612924} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612924,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:21] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612924,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"589c0894-ea02-4860-a29d-b4c01aebed50\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612923,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612923,\"participants\":[{\"id\":1000288,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000289,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612923,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:23] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612923,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612923} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612923,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612923,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"773e5722-a5c7-48ec-b0d8-11b3aa2aa37a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612922,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89}} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612922,\"participants\":[{\"id\":1000286,\"user_id\":19,\"contact_id\":null,\"lead_id\":null},{\"id\":1000287,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:24] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612922,\"team_id\":2,\"email\":\"james.graham@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612922,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612922} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612922,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612922,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":165,\"stage_id\":89} {\"correlation_id\":\"7d6f9c8c-16e0-4f84-b07d-adddfa5c739f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612847,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612847} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612847,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612847,\"participants\":[{\"id\":1000130,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":1000131,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000151,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:25] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage before starting command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryPeakBeforeCommandInMb\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: Jiminny\\Console\\Commands\\Command::run Memory usage for command {\"command\":\"dialers:monitor-activities\",\"memoryBeforeCommandInMb\":60.0,\"memoryAfterCommandInMB\":60.0,\"memoryPeakBeforeCommandInMb\":99.727,\"memoryPeakAfterCommandInMB\":99.727} {\"correlation_id\":\"503de928-3a1a-4314-a23f-ca2625111f7f\",\"trace_id\":\"7ee54e65-014c-4ae3-821a-dc0488dc10ed\"}\n[2026-05-11 11:09:26] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"adelina.petrova@jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/adelina.petrova%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] No retry-after header or known message, using default {\"exception_class\":\"SevenShores\\\\Hubspot\\\\Exceptions\\\\BadRequest\",\"message\":\"\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.WARNING: [Hubspot] Received 429 from API {\"team_id\":2,\"config_id\":2,\"retry_after\":10,\"message\":\"\",\"reason\":\"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\\\"status\\\":\\\"error\\\",\\\"message\\\":\\\"You have reached your secondly limit.\\\",\\\"errorType\\\":\\\"RATE_LIMIT\\\",\\\"correlationId\\\":\\\"019e16ba-4 (truncated...)\n\"} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"462c34b9-0b57-4e81-a9e2-5ce4a6900814\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612822,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:26] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612822,\"participants\":[{\"id\":1000080,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000081,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612822,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612822,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612822} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612822,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612822,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"ca259dfb-7b24-4406-9b61-a4f28761020b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612819,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612819} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612819,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612819,\"participants\":[{\"id\":1000073,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":1000074,\"user_id\":261,\"contact_id\":null,\"lead_id\":null},{\"id\":1000075,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612819,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"adelina.petrova@jiminny.com\"} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cd602b18-88a5-4ea9-afef-e52be017fc0f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612673,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612673,\"participants\":[{\"id\":999993,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999994,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612673,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612673,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612673} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612673,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612673,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"d86174e3-e3b0-41d6-b9f5-97de4ca4da9f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612642,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36}} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612642,\"participants\":[{\"id\":999935,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null},{\"id\":999936,\"user_id\":261,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612642,\"team_id\":2,\"email\":\"adelina.petrova@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612642,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612642} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612642,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:27] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612642,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":299,\"stage_id\":36} {\"correlation_id\":\"2f9f8923-a6e3-4e5b-a1ae-cdea42bb3cda\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612598,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612598,\"participants\":[{\"id\":999857,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999858,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":243,\"contact_id\":4491,\"owner_id\":206} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":243,\"contact_id\":4491} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":243,\"contact_id\":4491,\"opportunity_id\":276} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612598,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612598,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612598} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612598,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612598,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"65bf29b2-12dc-4d67-a47e-52e71166d9f6\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":5.94,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612597,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612597,\"participants\":[{\"id\":999855,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999856,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612597,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612597,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612597} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612597,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612597,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"c69a3a24-bab5-4d56-887b-01111944b3a2\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612596,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612596,\"participants\":[{\"id\":999853,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999854,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:28] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612596,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612596,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612596} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612596,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612596,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0da9fc28-653b-406f-bafe-5d78010cb3da\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612595,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612595,\"participants\":[{\"id\":999851,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999852,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612595,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612595,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612595} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612595,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612595,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"f7dd9c18-1f48-4adc-b2a2-a5e768444dfd\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612594,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612594,\"participants\":[{\"id\":999849,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999850,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612594,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612594,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612594} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612594,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612594,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4dacaa76-fc8b-462e-95ae-b74602d62a8f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612593,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612593,\"participants\":[{\"id\":999847,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999848,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612593,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612593,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612593} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612593,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612593,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"0845a766-3bc8-4303-83dc-9f0e57d46a44\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612592,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612592,\"participants\":[{\"id\":999845,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999846,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612592,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612592,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612592} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612592,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:29] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612592,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"315733d6-e316-4fb7-9ab6-c38b0bc2a394\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612591,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612591,\"participants\":[{\"id\":999843,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999844,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612591,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612591,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612591} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612591,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612591,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a4f3cee6-628d-4ea1-afef-271709541a6f\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612590,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612590,\"participants\":[{\"id\":999841,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999842,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612590,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612590,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612590} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612590,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612590,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"dfa94946-5871-4106-8e8f-5e7a418e64ae\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612589,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612589,\"participants\":[{\"id\":999839,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999840,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612589,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612589,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612589} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612589,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612589,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"92666ef7-2d6e-4056-9d87-23df1bc694b1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612588,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612588,\"participants\":[{\"id\":999837,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999838,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612588,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612588,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612588} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612588,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:30] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612588,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"7441c20c-f1d3-4310-a3a7-2c1aad9bbe25\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612587,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612587,\"participants\":[{\"id\":999835,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999836,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612587,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612587,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612587} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612587,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612587,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b6283377-e461-4841-90a6-bd9b51c31e78\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612586,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612586,\"participants\":[{\"id\":999833,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999834,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612586,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612586,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612586} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612586,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612586,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"d0ddb01c-2b21-4989-998a-fa52e7affced\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring start {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612585,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.NOTICE: Monitoring end {\"correlation_id\":\"772cf24f-66f8-49c0-8ef5-e6c1d128fccb\",\"trace_id\":\"2d950f5a-3a35-4a8b-b33b-4d129409925b\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612585,\"participants\":[{\"id\":999831,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999832,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612585,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612585,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612585} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612585,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612585,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"cef11ffe-61af-425d-b899-399323237a47\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612584,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612584,\"participants\":[{\"id\":999829,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999830,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612584,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612584,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612584} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612584,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612584,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"2aa83935-5a46-4a3d-98d7-acfcf3f3f6cb\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612583,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612583,\"participants\":[{\"id\":999827,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999828,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612583,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612583,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612583} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612583,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:31] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612583,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"04dd4d55-bdb2-4f42-9fbd-8a132707b475\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612582,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612582,\"participants\":[{\"id\":999825,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999826,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612582,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612582,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612582} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612582,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612582,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"58e7116b-76f4-4698-a629-ff1eb613d93e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612581,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612581,\"participants\":[{\"id\":999823,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999824,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612581,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612581,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612581} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612581,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612581,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"b1cdf1eb-a77f-4062-bc7a-52e75ec005f1\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612565,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612565,\"participants\":[{\"id\":999789,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999790,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null}]} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612565,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:32] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612565,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612565} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612565,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612565,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"4531fd00-7875-4334-b3c2-407d31ec1255\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612563,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34}} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612563,\"participants\":[{\"id\":999784,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999785,\"user_id\":null,\"contact_id\":4487,\"lead_id\":null}]} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612563,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":244,\"contact_id\":4487,\"owner_id\":206} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":244,\"contact_id\":4487} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":244,\"contact_id\":4487,\"opportunity_id\":350} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinson@crusoe.com\"} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612563,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612563} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612563,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612563,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4487,\"account_id\":244,\"opportunity_id\":350,\"stage_id\":34} {\"correlation_id\":\"b2ea69fc-9176-494f-b933-f64c1de72377\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612562,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612562} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612562,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612562,\"participants\":[{\"id\":999782,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999783,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:33] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447782589921@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447782589921%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":14} {\"correlation_id\":\"096bc408-0a3f-43ef-9cf6-f9007ee7315c\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612561,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612561} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612561,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612561,\"participants\":[{\"id\":999780,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999781,\"user_id\":null,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612561,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:34] local.INFO: [Prospect match] Cache miss, calling the API {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Hubspot] Failed to fetch contact {\"email\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\",\"reason\":\"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/447700174614.447782589921.OeREojLVnk%40txt.staging.jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {\"identifier_type\":\"email\",\"identifier\":\"447700174614.447782589921.OeREojLVnk@txt.staging.jiminny.com\"} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":10} {\"correlation_id\":\"cded6bdb-0e7c-4baa-b280-5798e81b236a\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612560,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":null,\"account_id\":26,\"opportunity_id\":22,\"stage_id\":89}} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612560} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612560,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612560,\"participants\":[{\"id\":999778,\"user_id\":null,\"contact_id\":null,\"lead_id\":null},{\"id\":999779,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {\"identifier_type\":\"email\",\"identifier\":\"447782589921@txt.staging.jiminny.com\"} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {\"job_class\":\"Jiminny\\\\Jobs\\\\Crm\\\\MatchActivityCrmData\",\"attempts\":1,\"retry_after\":10,\"delay\":12} {\"correlation_id\":\"53ef5599-df42-4f3d-90a1-8f89c19435e4\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612559,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612559,\"participants\":[{\"id\":999776,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999777,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612559,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Searching DB for opportunity by owner {\"account_id\":69,\"contact_id\":97,\"owner_id\":206} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Fallback DB opportunity search {\"account_id\":69,\"contact_id\":97} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: ProspectCache - Opportunity DB search results {\"account_id\":69,\"contact_id\":97,\"opportunity_id\":5011} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateProcessManager ] Finished updating entities in ES {\"worker\":\"\",\"peak_memory\":\"99.73 MB\",\"elapsed_seconds\":2.07,\"update_target\":\"activities\",\"should_iterate_again\":false} {\"correlation_id\":\"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8\",\"trace_id\":\"906573b5-005c-4820-8a32-3b0703ea86dd\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612559,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612559} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612559,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612559,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c3d3b2ae-6863-4f04-94a5-f09eabb50d2e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612558,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612558,\"participants\":[{\"id\":999774,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999775,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612558,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612558,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612558} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612558,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612558,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"34a7b1c6-be3b-4790-a04c-0311e25dadc8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:35] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612557,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612557,\"participants\":[{\"id\":999772,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999773,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612557,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612557,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612557} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612557,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612557,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"26d4d3d0-ebf8-44ad-a48f-24728e5539e0\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612556,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612556,\"participants\":[{\"id\":999770,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999771,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612556,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612556,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612556} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612556,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612556,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"406b7ad3-26d6-4b1b-9ad7-fff68622b149\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612555,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612555,\"participants\":[{\"id\":999768,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999769,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612555,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612555,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612555} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612555,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612555,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c15b7703-f17b-48e7-bf38-122448d79345\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612554,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612554,\"participants\":[{\"id\":999766,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999767,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612554,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612554,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612554} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612554,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612554,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c9cce71b-d96d-4117-b9fb-bb9672ae7c2b\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612553,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612553,\"participants\":[{\"id\":999764,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999765,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612553,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612553,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612553} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612553,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612553,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"ffd2857e-be14-4ab1-8533-93b20116db02\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612552,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612552,\"participants\":[{\"id\":999762,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999763,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612552,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612552,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612552} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612552,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612552,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"7942c5ee-3b2d-4f76-8728-d5343cd7b02e\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612551,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612551,\"participants\":[{\"id\":999760,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999761,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612551,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612551,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612551} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612551,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:36] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612551,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"8068bb0d-ab6d-48ee-abe2-d6cd116aba26\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612550,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612550,\"participants\":[{\"id\":999758,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999759,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612550,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:37] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612550,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612550} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612550,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612550,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"36bdbff9-cfb6-43af-b7c4-f2caafa8e794\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612549,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34}} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:38] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612549,\"participants\":[{\"id\":999756,\"user_id\":206,\"contact_id\":null,\"lead_id\":null},{\"id\":999757,\"user_id\":null,\"contact_id\":97,\"lead_id\":null}]} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612549,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"robinsoncrusoe@test.com\"} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612549,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612549} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612549,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:39] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612549,\"remote_search\":true,\"lead_id\":null,\"contact_id\":97,\"account_id\":69,\"opportunity_id\":5011,\"stage_id\":34} {\"correlation_id\":\"c2ff3c6c-7380-4c1c-a1f5-50044a473ac8\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Starting CRM data matching {\"activity\":612365,\"remote_search\":true,\"set_configuration\":2,\"old_state\":{\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36}} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [MatchActivityCrmData] Participants old state {\"activity\":612365,\"participants\":[{\"id\":999563,\"user_id\":null,\"contact_id\":4491,\"lead_id\":null},{\"id\":999564,\"user_id\":206,\"contact_id\":null,\"lead_id\":null}]} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Fetching token {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [SocialAccountService] Token retrieved {\"socialAccountId\":1499,\"provider\":\"hubspot\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [EncryptedTokenManager] Generating access token. {\"mode\":\"legacy\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {\"crm_provider\":\"hubspot\",\"crm_owner\":148,\"team_id\":2} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [Prospect match] Cache / local search hit {\"identifier_type\":\"email\",\"identifier\":\"horencho@gmail.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] Email domain belongs to the team, skipping crm lookup {\"activity_id\":612365,\"team_id\":2,\"email\":\"horen.kirazyan@jiminny.onmicrosoft.com\"} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [CrmActivityService] CRM matching completed {\"activity_id\":612365,\"participants_processed\":2,\"exact_matches\":1,\"domain_matches\":0,\"best_match_found\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ EsUpdateTarget ] Update single target {\"target\":\"activities\",\"purpose\":\"searchable-observer-update\",\"entityId\":612365} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:40] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {\"entityType\":\"activities\",\"entityId\":612365,\"collectionKey\":\"activities-for-update-priority\",\"withPriority\":true} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}\n[2026-05-11 11:09:41] local.INFO: [MatchActivityCrmData] Successfully matched CRM data {\"activity\":612365,\"remote_search\":true,\"lead_id\":null,\"contact_id\":4491,\"account_id\":243,\"opportunity_id\":276,\"stage_id\":36} {\"correlation_id\":\"a9faea34-163e-4d2a-8007-c903951e3b79\",\"trace_id\":\"7954a095-b2fb-4c22-bbb6-0c5baa0c7176\"}","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}]...
|
8682107944457975172
|
-2556523036834395804
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20725-handle-HS-search Project: faVsco.js, menu
JY-20725-handle-HS-search-rate-limit, menu
Start Listening for PHP Debug Connections
HandleHubspotRateLimitTest
Run 'HandleHubspotRateLimitTest'
Debug 'HandleHubspotRateLimitTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
67
3
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\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 Illuminate\Support\Facades\Redis;
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)
{
$cacheKey = $this->getRateLimitCacheKey();
$cachedRetryAfter = Redis::get($cacheKey);
if (is_string($cachedRetryAfter) && is_numeric($cachedRetryAfter)) {
throw new RateLimitException(
'Hubspot rate limit (cached circuit-breaker)',
(int) $cachedRetryAfter,
);
}
try {
return $apiCall();
} catch (Throwable $e) {
if ($this->isHubspotRateLimit($e)) {
$retryAfter = $this->parseRetryAfter($e);
Redis::setex($cacheKey, $retryAfter, (string) $retryAfter);
$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 getRateLimitCacheKey(): string
{
return sprintf('hubspot:ratelimit:portal:%d', $this->config->getId());
}
public function isHubspotRateLimit(Throwable $e): bool
{
if ($e instanceof BadRequest
|| $e instanceof DealApiException
|| $e instanceof ContactApiException
|| $e instanceof CompanyApiException
|| $e instanceof \GuzzleHttp\Exception\RequestException
) {
return (int) $e->getCode() === 429;
}
return false;
}
public 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;
}
}
$message = strtolower($e->getMessage());
if (str_contains($message, 'daily')) {
return 600;
}
if (str_contains($message, 'ten secondly')) {
return 10;
}
if (str_contains($message, 'secondly')) {
return 1;
}
$this->log->warning('[Hubspot] No retry-after header or known message, using default', [
'exception_class' => get_class($e),
'message' => $message,
]);
return 10;
}
public function parseMessage(Throwable $e): string
{
if (! method_exists($e, 'getResponseBody')) {
return '';
}
$body = $e->getResponseBody();
if (is_string($body)) {
$body = json_decode($body, true) ?? [];
}
if (! is_array($body)) {
return '';
}
return (string) ($body['message'] ?? '');
}
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
);
}
/**
* Execute a search request against HubSpot CRM objects with rate limiting.
*
* @param string $objectType The object type ('deals', 'companies', 'contacts', 'calls')
* @param array<string, mixed> $payload The search payload with filters, sorts, properties, etc.
* @return array The search response with 'results', 'total', 'paging' keys
* @throws RateLimitException When rate limit is hit
* @throws HubspotException On API errors
*/
public function search(string $objectType, array $payload): array
{
$endpoint = self::BASE_URL . "/crm/v3/objects/{$objectType}/search";
return $this->executeRequest(function () use ($endpoint, $payload) {
$response = $this->getInstance()->getClient()->request('POST', $endpoint, ['json' => $payload]);
return $response->toArray();
});
}
/**
* @throws DealApiException
* @throws CrmException
*/
public function getOpportunityById(string $crmId, array $fields): array
{
try {
$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') {
return $this->getInstance()->getClient()?->request(
method: $method,
endpoint: $endpoint,
query_string: $queryString
);
} else {
return $this->getInstance()->getClient()->request($method, $endpoint, [
'json' => ($payload),
]);
}
}
/**
* @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 (RateLimitException $e) {
// throw $e;
} 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);
}
}
Show Replace Field
Search History
429
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
1/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Sync Changes
Hide This Notification
Code changed:
Hide
54
Previous Highlighted Error
Next Highlighted Error
[2026-05-11 11:08:45] 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":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:08:45] local.INFO: [Commands/AsyncUpdateEsEntities] Starting ES update worker {"pid":72650,"workerId":"","target":"activities"} {"correlation_id":"6d49ffdc-2ed7-4eae-a1ee-e25ca95bbea8","trace_id":"906573b5-005c-4820-8a32-3b0703ea86dd"}
[2026-05-11 11:08:46] local.INFO: Jiminny\Console\Commands\Command::run Memory usage for command {"command":"mailbox:batch:retry-failed","memoryBeforeCommandInMb":60.0,"memoryAfterCommandInMB":60.0,"memoryPeakBeforeCommandInMb":99.727,"memoryPeakAfterCommandInMB":99.727} {"correlation_id":"43b1fb67-9aac-4fc6-9ced-689ecda5c548","trace_id":"60028d0e-dcd8-496a-a7ba-3a04b8d646e2"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":615092,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":615092} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":615092,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [MatchActivityCrmData] Participants old state {"activity":615092,"participants":[{"id":1004102,"user_id":null,"contact_id":null,"lead_id":null},{"id":1004103,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:12] local.INFO: [Prospect match] Cache miss, calling the API {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Hubspot] Failed to fetch contact {"email":"[EMAIL]","reason":"[404] Client error: `GET https://api.hubapi.com/crm/v3/objects/contacts/nikolay.nikolov%40jiminny.com?properties=email%2Cfirstname%2Clastname%2Ccountry%2Cphone%2Cmobilephone%2Cjobtitle%2Chubspot_owner_id%2Cassociatedcompanyid%2Cphoto&archived=0&idProperty=email` resulted in a `404 Not Found` response"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [Prospect match] API returned empty result, caching the miss with empty prospect data {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] No retry-after header or known message, using default {"exception_class":"SevenShores\\Hubspot\\Exceptions\\BadRequest","message":""} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.WARNING: [Hubspot] Received 429 from API {"team_id":2,"config_id":2,"retry_after":10,"message":"","reason":"Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:
{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e16ba-1 (truncated...)
"} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:13] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f33d47cb-76c6-4c27-a641-48cbf69e623d","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614436,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614436} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614436,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614436,"participants":[{"id":1002751,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002752,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"ccafe863-7885-4971-96fb-87ef6dd4adf3","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614382,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614382} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614382,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614382,"participants":[{"id":1002632,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002633,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":12} {"correlation_id":"f00a4506-adfe-4fdc-b932-e6d2bc751fde","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614381,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":null,"account_id":26,"opportunity_id":22,"stage_id":89}} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614381} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [ AsyncUpdateElasticSearch ] Entity added to Redis list {"entityType":"activities","entityId":614381,"collectionKey":"activities-for-update-priority","withPriority":true} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [MatchActivityCrmData] Participants old state {"activity":614381,"participants":[{"id":1002630,"user_id":null,"contact_id":null,"lead_id":null},{"id":1002631,"user_id":89,"contact_id":null,"lead_id":null}]} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Fetching token {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [SocialAccountService] Token retrieved {"socialAccountId":1499,"provider":"hubspot"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [EncryptedTokenManager] Generating access token. {"mode":"legacy"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [CrmOwnerResolver] Integration owner matched as CRM Owner {"crm_provider":"hubspot","crm_owner":148,"team_id":2} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] Cache / local search hit {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [Prospect match] cached empty result - no API calls, try next matching method {"identifier_type":"email","identifier":"[EMAIL]"} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:14] local.INFO: [HandleHubspotRateLimit] Rate limit caught, releasing job with delay {"job_class":"Jiminny\\Jobs\\Crm\\MatchActivityCrmData","attempts":1,"retry_after":10,"delay":10} {"correlation_id":"36bd73f5-17f9-4f70-8254-2214543c7f8e","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [MatchActivityCrmData] Starting CRM data matching {"activity":614378,"remote_search":true,"set_configuration":2,"old_state":{"lead_id":null,"contact_id":6167,"account_id":null,"opportunity_id":null,"stage_id":null}} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ EsUpdateTarget ] Update single target {"target":"activities","purpose":"searchable-observer-update","entityId":614378} {"correlation_id":"a4a3a058-ec22-4f04-bb14-a9bff18ce214","trace_id":"7954a095-b2fb-4c22-bbb6-0c5baa0c7176"}
[2026-05-11 11:09:15] local.INFO: [ AsyncU...
|
18352
|
NULL
|
NULL
|
NULL
|
|
18355
|
792
|
35
|
2026-05-11T11:12:52.171744+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497972171_m1.jpg...
|
Notion Calendar
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:51181DEV (docker)-zshDOCKERcompiledeventsroutesviews181DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
NULL
|
-5713839574644225786
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlPreparation for Refi... in 48 m100% <78• Mon 11 May 14:12:51181DEV (docker)-zshDOCKERcompiledeventsroutesviews181DEV (docker)$2APP (-zsh)*3Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedsing-1 0: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cachestate.root@docker_lamp_1:/home/jiminny# ]84-zshX5screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONE-zsh+DEV...
|
18353
|
NULL
|
NULL
|
NULL
|
|
18357
|
793
|
32
|
2026-05-11T11:12:52.177827+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497972177_m2.jpg...
|
Notion Calendar
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY- PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY-20725-handle-HS-search-rate-limiProject© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalize125c) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O Accessors130ConfigD DTOD FiltersD JobsProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph©LocalSearch.phpu Localsearchinteria© RemoteSearch.php134135136142c) Service.phpv W Listeners© ConvertLeadActivitc) PurceLookuocache› D Metadata> MiarationPipedrivev Salesforce151• D FieldsM OnnortunitvMatcheOpportunitySyncSti153M ProsneetSearchStr.154• M ServiceTraitcC) Client nhr© DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)class Cllent extends Baseclient 1mpLements Hubspotclientintertacenubu1etunction 1shubspotrateuimithrowaole se: 000lII $e instanceof \GuzzLeHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;recurn talsepubuac function parseRetrvAfterThrowable Se: 1nt'getResponseHeaders')) {Sheaders = $e->getResponseHeaders() ?: [1;svalue = Sheadersl'Retry-After'J ?? Sheadersl'retry-after"J ?? null;if (is_array($value)) €= Svaluel0l 22 null.if (is_numeric($value)) {return (int) $valve;Smessage = strtolower ($e->getMessage()) :|if (str_contains($message, 'daily')) {if (str_contains($message, 'ten secondly')) {recurn 10-if (str_contains($message, 'secondly')) {return 1Sthis->log->warning(' [Hubspot] No retry-after header or known message, using default', I'exception_class' => get_class($e),public function parseMessage(Throwable $e): stringHudspol/serwice.pnp| A2 A67 X3 A VM1/ 1011TIIДL ШI1E laravel.log >$0halPreparation for Refi... in 48m100% 58• Mon 11 May 14:12:51&console [pRODlA console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":61,te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId" :1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target *"target":"activities'rch ] Entity added to Redis list f"entiParticinants old state ""activitv:044Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {"1 Rate limit caught. releasing job withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
NULL
|
-7857953173254033322
|
NULL
|
click
|
ocr
|
NULL
|
PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY- PhostormFV faVsco.jsVIewINavicareCodeLaravel%9 JY-20725-handle-HS-search-rate-limiProject© BatchSyncCollectore balchsynckealsse* SyncCrmEntities Trait.php© CachedCrmServiceDecorator.php© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phpC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalize125c) Service.onr© SyncFieldAction.phC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAor> O Accessors130ConfigD DTOD FiltersD JobsProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph©LocalSearch.phpu Localsearchinteria© RemoteSearch.php134135136142c) Service.phpv W Listeners© ConvertLeadActivitc) PurceLookuocache› D Metadata> MiarationPipedrivev Salesforce151• D FieldsM OnnortunitvMatcheOpportunitySyncSti153M ProsneetSearchStr.154• M ServiceTraitcC) Client nhr© DecorateActivity.pt. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpTests passed: 13 (today 13:02)class Cllent extends Baseclient 1mpLements Hubspotclientintertacenubu1etunction 1shubspotrateuimithrowaole se: 000lII $e instanceof \GuzzLeHttp\Exception\RequestExceptionreturn (int) $e->getCode() === 429;recurn talsepubuac function parseRetrvAfterThrowable Se: 1nt'getResponseHeaders')) {Sheaders = $e->getResponseHeaders() ?: [1;svalue = Sheadersl'Retry-After'J ?? Sheadersl'retry-after"J ?? null;if (is_array($value)) €= Svaluel0l 22 null.if (is_numeric($value)) {return (int) $valve;Smessage = strtolower ($e->getMessage()) :|if (str_contains($message, 'daily')) {if (str_contains($message, 'ten secondly')) {recurn 10-if (str_contains($message, 'secondly')) {return 1Sthis->log->warning(' [Hubspot] No retry-after header or known message, using default', I'exception_class' => get_class($e),public function parseMessage(Throwable $e): stringHudspol/serwice.pnp| A2 A67 X3 A VM1/ 1011TIIДL ШI1E laravel.log >$0halPreparation for Refi... in 48m100% 58• Mon 11 May 14:12:51&console [pRODlA console (EU]A console [STAGING]s\Command: :run Memory usage before starting command {"conEntitles Startind Es undate worker "oid":12650."workenlid"*"s\Command: :run Memory usage for command {"cStarting CRM data matching {"activity":61,te single target {"target": "activities"rch ] Entity added to Redis list {"entiParticipants old state {"activity":6150Fetching token {"socialAccountId" :1499,Token retrieved {"socialAccountId" :1499Generating access token. {"mode": "legagration owner matched as CRM Owner {"crmiss, calling the API {"identifier_typech contact {"email": "nikolay.nikolov@jiturned empty result, caching the miss vfter header or known message, using dei29 from API {"team_id":2, "config_id":2,secondly Limit.\", \"errorType\":\ "RATEd", "trace_id":"7954a095-b2fb-4c22-bbb6-Rate limit caught. releasina 100 withStarting CRM data matching f"activity":te single target *"target":"activities'rch ] Entity added to Redis list f"entiParticinants old state ""activitv:044Fetching token {"socialAccountId":1499,Token retrieved "socialAccountId"• 1499aration owner matched as CRM Owner "cn/ local search hit {"identifier_type":"empty resultnd APt calle +ry neyt1 Rate limit caught, releasing job withStarting CRM data matching {"activity":te single target {"target":"activities"rch ] Entity added to Redis list {"entiParticipants old state ("activity":6143Fetching token {"socialAccountId":1499,Token retrieved {"socialAccountId" : 1499Generating access token. ("mode": "Legagration owner matched as CRM Owner ("cr/ local search hit ("identifier_type":"empty result - no APT calls. try next matching method {"1 Rate limit caught. releasing job withStarting CRM data matching {"activity",te single target {"target"."activities'rch ] Entity added to Redis list {"entiParticinants old state {"activitv".614.Fetching token {"socialAccountId"•1499)Token retrieved {"socialAccountId" :1499Generatina access token. "mode"."Leo:aration owner matched as CRM Ownen {"crbjects/contact/search' resulte...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18356
|
792
|
36
|
2026-05-11T11:12:55.283889+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497975283_m1.jpg...
|
iTerm2
|
DEV (docker)
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSW config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSWORD_DOTS] 21.31ms DONE
compiled [PASSWORD_DOTS] 3.11ms DONE
events [PASSWORD_DOTS] 5.05ms DONE
routes [PASSWORD_DOTS] 1.83ms DONE
views [PASSWORD_DOTS] 4.91ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 37.77ms DONE
cache [PASSWORD_DOTS] 58.83ms DONE
compiled [PASSWORD_DOTS] 9.93ms DONE
events [PASSWORD_DOTS] 12.23ms DONE
routes [PASSWORD_DOTS] 5.02ms DONE
views [PASSWORD_DOTS] 21.46ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.01ms DONE
cache [PASSWORD_DOTS] 16.11ms DONE
compiled [PASSWORD_DOTS] 2.91ms DONE
events [PASSWORD_DOTS] 2.27ms DONE
routes [PASSWORD_DOTS] 3.11ms DONE
views [PASSWORD_DOTS] 18.41ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
SevenShores\Hubspot\Exceptions\BadRequest
Client error: `POST [URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 55.84ms DONE
cache [PASSWORD_DOTS] 108.68ms DONE
compiled [PASSWORD_DOTS] 22.07ms DONE
events [PASSWORD_DOTS] 25.86ms DONE
routes [PASSWORD_DOTS] 19.91ms DONE
views [PASSWORD_DOTS] 52.25ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-audio:worker-audio_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
TypeError
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83
79▕
80▕ // Update reference parameters
81▕ $total = $state->total;
82▕ $lastRecordId = $state->lastRecordId;
➜ 83▕ }
84▕
85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool
86▕ {
87▕ if ($state->hasReachedSafetyLimit()) {
1 app/Services/Crm/Hubspot/Client.php:195
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\Services\Crm\Hubspot\Client), [], "contact")
2 app/Services/Crm/Hubspot/Client.php:176
Jiminny\Services\Crm\Hubspot\Client::getPaginatedDataGenerator([], "contact")
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.73ms DONE
cache [PASSWORD_DOTS] 19.13ms DONE
compiled [PASSWORD_DOTS] 4.93ms DONE
events [PASSWORD_DOTS] 3.02ms DONE
routes [PASSWORD_DOTS] 5.55ms DONE
views [PASSWORD_DOTS] 6.02ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 4.47ms DONE
cache [PASSWORD_DOTS] 16.66ms DONE
compiled [PASSWORD_DOTS] 3.26ms DONE
events [PASSWORD_DOTS] 3.99ms DONE
routes [PASSWORD_DOTS] 3.85ms DONE
views [PASSWORD_DOTS] 4.93ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.42ms DONE
cache [PASSWORD_DOTS] 23.70ms DONE
compiled [PASSWORD_DOTS] 3.46ms DONE
events [PASSWORD_DOTS] 4.30ms DONE
routes [PASSWORD_DOTS] 8.35ms DONE
views [PASSWORD_DOTS] 8.00ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.77ms DONE
cache [PASSWORD_DOTS] 25.55ms DONE
compiled [PASSWORD_DOTS] 3.87ms DONE
events [PASSWORD_DOTS] 4.96ms DONE
routes [PASSWORD_DOTS] 2.23ms DONE
views [PASSWORD_DOTS] 7.50ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
root@docker_lamp_1:/home/jiminny#
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status
On branch JY-20725-handle-HS-search-rate-limit
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: app/Jobs/Middleware/HandleHubspotRateLimit.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Exceptions/RateLimitException.php
modified: app/Jobs/Activity/Import/MatchCrmData.php
modified: app/Jobs/Crm/MatchActivityCrmData.php
modified: app/Services/Crm/Hubspot/Client.php
modified: app/Services/Crm/Hubspot/HubspotClientInterface.php
modified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php
modified: app/Services/Crm/Hubspot/Pagination/PaginationState.php
modified: app/Services/Crm/Hubspot/Service.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.local.bak
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr
* JY-20725-handle-HS-search-rate-limit
master
JY-20818-move-AJ-reports-to-separated-datadog-metric
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20157-AJ-report-not-send-notification
JY-20508-notify-before-AJ-report-expiration
JY-20372-ai-reports-promotion-pages
JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null
JY-20738-debug-AJ-tracking-UP
a
JY-18909-automated-reports-ask-jiminny
JY-20692-fix-integration-app-[API_KEY]
JY-20553-debug-crm-sync-delays
JY-20698-fix-SF-activity-types-on-new-playbook
JY-20543-AJ-report-tracking
JY-20384-handle-auto-sync-with-no-access-to-event-type
JY-20458-ask-jiminny-user-definitions
JY-19666-fix-import-contacts-account-association
JY-19666-HS-import-contacts-and-accounts-batch-job
JY-20458-Ask-Jiminny-Reports
JY-20200-batch-update-CRM-objects-Salesforce
JY-19666-HS-webhooks-add-contact-and-company
JY-20348-trigger-setup-DI-layout-on-team-creation
JY-20326-refactor-info-message-in-command
JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled
JY-20312-remove-on-update-change-last-synced-at-crm-configurations
JY-20306-SF-skip-auto-sync-for-task-based-playbook
JY-20192-remove-deleted-team-from-saved-search-filters
JY-20197-import-opportunity-batch-job
JY-20293-enable-status-field-for-pipedrive-deals
JY-20191-remove-commands-interactive-prompts
JY-20118-change-default-sync-strategy
JY-20183-add-cache-on-auto-log-delay
JY-20197-add-import-opportunity-batch-job
20118-hs-opportunity-make-webhook-strategy-default
JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based
JY-20196-handle-opportunity-without-note
JY-20118-improve-opportunity-import
JY-20189-handle-activity-search-on-deleted-groups
JY-20160
JY-20145-filter-out-converted-leads-when-matching
JY-20150-skip-push-summary-on-summary-ready-if-autolog
JY-20132-fix-note-encoding
JY-19792-clean-logs
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
+11 vendor frames
12 app/Console/Commands/JiminnyDebugCommand.php:380
Illuminate\Database\Eloquent\Builder::get()
13 app/Console/Commands/JiminnyDebugCommand.php:49
Jiminny\Console\Commands\JiminnyDebugCommand::simulateMatchActivityStorm()
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.01ms DONE
cache [PASSWORD_DOTS] 38.00ms DONE
compiled [PASSWORD_DOTS] 1.78ms DONE
events [PASSWORD_DOTS] 1.13ms DONE
routes [PASSWORD_DOTS] 1.56ms DONE
views [PASSWORD_DOTS] 3.25ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-audio:worker-audio_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.34ms DONE
cache [PASSWORD_DOTS] 11.98ms DONE
compiled [PASSWORD_DOTS] 2.10ms DONE
events [PASSWORD_DOTS] 5.31ms DONE
routes [PASSWORD_DOTS] 2.90ms DONE
views [PASSWORD_DOTS] 13.11ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.53ms DONE
cache [PASSWORD_DOTS] 128.25ms DONE
compiled [PASSWORD_DOTS] 1.73ms DONE
events [PASSWORD_DOTS] 1.07ms DONE
routes [PASSWORD_DOTS] 1.45ms DONE
views [PASSWORD_DOTS] 5.46ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-emails:worker-emails_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 69.57ms DONE
cache [PASSWORD_DOTS] 285.32ms DONE
compiled [PASSWORD_DOTS] 13.02ms DONE
events [PASSWORD_DOTS] 11.48ms DONE
routes [PASSWORD_DOTS] 6.30ms DONE
views [PASSWORD_DOTS] 51.86ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-emails:worker-emails_00: stopped
worker-audio:worker-audio_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 59.22ms DONE
cache [PASSWORD_DOTS] 97.76ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 4.67ms DONE
routes [PASSWORD_DOTS] 11.57ms DONE
views [PASSWORD_DOTS] 18.54ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-emails:worker-emails_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-crm-sync:worke...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"config .............................................................................................................................. 10.49ms DONE\n cache ............................................................................................................................... 21.31ms DONE\n compiled ............................................................................................................................. 3.11ms DONE\n events ............................................................................................................................... 5.05ms DONE\n routes ............................................................................................................................... 1.83ms DONE\n views ................................................................................................................................ 4.91ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 37.77ms DONE\n cache ............................................................................................................................... 58.83ms DONE\n compiled ............................................................................................................................. 9.93ms DONE\n events .............................................................................................................................. 12.23ms DONE\n routes ............................................................................................................................... 5.02ms DONE\n views ............................................................................................................................... 21.46ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.01ms DONE\n cache ............................................................................................................................... 16.11ms DONE\n compiled ............................................................................................................................. 2.91ms DONE\n events ............................................................................................................................... 2.27ms DONE\n routes ............................................................................................................................... 3.11ms DONE\n views ............................................................................................................................... 18.41ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n SevenShores\\Hubspot\\Exceptions\\BadRequest \n\n Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n\n at vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24\n 20▕ }\n 21▕ \n 22▕ public static function create(RequestException $guzzleException): self\n 23▕ {\n ➜ 24▕ $e = new static(\n 25▕ static::sanitizeResponseMessage($guzzleException->getMessage()),\n 26▕ $guzzleException->getCode(),\n 27▕ $guzzleException\n 28▕ );\n\n +13 vendor frames \n\n 14 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:163\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:51\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 55.84ms DONE\n cache .............................................................................................................................. 108.68ms DONE\n compiled ............................................................................................................................ 22.07ms DONE\n events .............................................................................................................................. 25.86ms DONE\n routes .............................................................................................................................. 19.91ms DONE\n views ............................................................................................................................... 52.25ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n TypeError \n\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83\n 79▕ \n 80▕ // Update reference parameters\n 81▕ $total = $state->total;\n 82▕ $lastRecordId = $state->lastRecordId;\n ➜ 83▕ }\n 84▕ \n 85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool\n 86▕ {\n 87▕ if ($state->hasReachedSafetyLimit()) {\n\n 1 app/Services/Crm/Hubspot/Client.php:195\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), [], \"contact\")\n\n 2 app/Services/Crm/Hubspot/Client.php:176\n Jiminny\\Services\\Crm\\Hubspot\\Client::getPaginatedDataGenerator([], \"contact\")\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.73ms DONE\n cache ............................................................................................................................... 19.13ms DONE\n compiled ............................................................................................................................. 4.93ms DONE\n events ............................................................................................................................... 3.02ms DONE\n routes ............................................................................................................................... 5.55ms DONE\n views ................................................................................................................................ 6.02ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.47ms DONE\n cache ............................................................................................................................... 16.66ms DONE\n compiled ............................................................................................................................. 3.26ms DONE\n events ............................................................................................................................... 3.99ms DONE\n routes ............................................................................................................................... 3.85ms DONE\n views ................................................................................................................................ 4.93ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.42ms DONE\n cache ............................................................................................................................... 23.70ms DONE\n compiled ............................................................................................................................. 3.46ms DONE\n events ............................................................................................................................... 4.30ms DONE\n routes ............................................................................................................................... 8.35ms DONE\n views ................................................................................................................................ 8.00ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.77ms DONE\n cache ............................................................................................................................... 25.55ms DONE\n compiled ............................................................................................................................. 3.87ms DONE\n events ............................................................................................................................... 4.96ms DONE\n routes ............................................................................................................................... 2.23ms DONE\n views ................................................................................................................................ 7.50ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ dev\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status\nOn branch JY-20725-handle-HS-search-rate-limit\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: app/Jobs/Middleware/HandleHubspotRateLimit.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Exceptions/RateLimitException.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Activity/Import/MatchCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Crm/MatchActivityCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Client.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/HubspotClientInterface.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/PaginationState.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.local.bak\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr\n* JY-20725-handle-HS-search-rate-limit\n master\n JY-20818-move-AJ-reports-to-separated-datadog-metric\n JY-20773-fix-automated-reports-user-pilot-tracking\n JY-20157-AJ-report-not-send-notification\n JY-20508-notify-before-AJ-report-expiration\n JY-20372-ai-reports-promotion-pages\n JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null\n JY-20738-debug-AJ-tracking-UP\n a\n JY-18909-automated-reports-ask-jiminny\n JY-20692-fix-integration-app-token-auth-response-change\n JY-20553-debug-crm-sync-delays\n JY-20698-fix-SF-activity-types-on-new-playbook\n JY-20543-AJ-report-tracking\n JY-20384-handle-auto-sync-with-no-access-to-event-type\n JY-20458-ask-jiminny-user-definitions\n JY-19666-fix-import-contacts-account-association\n JY-19666-HS-import-contacts-and-accounts-batch-job\n JY-20458-Ask-Jiminny-Reports\n JY-20200-batch-update-CRM-objects-Salesforce\n JY-19666-HS-webhooks-add-contact-and-company\n JY-20348-trigger-setup-DI-layout-on-team-creation\n JY-20326-refactor-info-message-in-command\n JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled\n JY-20312-remove-on-update-change-last-synced-at-crm-configurations\n JY-20306-SF-skip-auto-sync-for-task-based-playbook\n JY-20192-remove-deleted-team-from-saved-search-filters\n JY-20197-import-opportunity-batch-job\n JY-20293-enable-status-field-for-pipedrive-deals\n JY-20191-remove-commands-interactive-prompts\n JY-20118-change-default-sync-strategy\n JY-20183-add-cache-on-auto-log-delay\n JY-20197-add-import-opportunity-batch-job\n 20118-hs-opportunity-make-webhook-strategy-default\n JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based\n JY-20196-handle-opportunity-without-note\n JY-20118-improve-opportunity-import\n JY-20189-handle-activity-search-on-deleted-groups\n JY-20160\n JY-20145-filter-out-converted-leads-when-matching\n JY-20150-skip-push-summary-on-summary-ready-if-autolog\n JY-20132-fix-note-encoding\n JY-19792-clean-logs\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\n\n Illuminate\\Database\\QueryException \n\n SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)\n\n at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838\n 834▕ $exceptionType = $this->isUniqueConstraintError($e)\n 835▕ ? UniqueConstraintViolationException::class\n 836▕ : QueryException::class;\n 837▕ \n ➜ 838▕ throw new $exceptionType(\n 839▕ $this->getNameWithReadWriteType(),\n 840▕ $query,\n 841▕ $this->prepareBindings($bindings),\n 842▕ $e,\n\n +11 vendor frames \n\n 12 app/Console/Commands/JiminnyDebugCommand.php:380\n Illuminate\\Database\\Eloquent\\Builder::get()\n\n 13 app/Console/Commands/JiminnyDebugCommand.php:49\n Jiminny\\Console\\Commands\\JiminnyDebugCommand::simulateMatchActivityStorm()\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.01ms DONE\n cache ............................................................................................................................... 38.00ms DONE\n compiled ............................................................................................................................. 1.78ms DONE\n events ............................................................................................................................... 1.13ms DONE\n routes ............................................................................................................................... 1.56ms DONE\n views ................................................................................................................................ 3.25ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.34ms DONE\n cache ............................................................................................................................... 11.98ms DONE\n compiled ............................................................................................................................. 2.10ms DONE\n events ............................................................................................................................... 5.31ms DONE\n routes ............................................................................................................................... 2.90ms DONE\n views ............................................................................................................................... 13.11ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.53ms DONE\n cache .............................................................................................................................. 128.25ms DONE\n compiled ............................................................................................................................. 1.73ms DONE\n events ............................................................................................................................... 1.07ms DONE\n routes ............................................................................................................................... 1.45ms DONE\n views ................................................................................................................................ 5.46ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 69.57ms DONE\n cache .............................................................................................................................. 285.32ms DONE\n compiled ............................................................................................................................ 13.02ms DONE\n events .............................................................................................................................. 11.48ms DONE\n routes ............................................................................................................................... 6.30ms DONE\n views ............................................................................................................................... 51.86ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-audio:worker-audio_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 59.22ms DONE\n cache ............................................................................................................................... 97.76ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 4.67ms DONE\n routes .............................................................................................................................. 11.57ms DONE\n views ............................................................................................................................... 18.54ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 5.16ms DONE\n cache ............................................................................................................................... 27.20ms DONE\n compiled ............................................................................................................................. 2.01ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.13ms DONE\n views ............................................................................................................................... 15.28ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny#","depth":4,"on_screen":true,"value":"config .............................................................................................................................. 10.49ms DONE\n cache ............................................................................................................................... 21.31ms DONE\n compiled ............................................................................................................................. 3.11ms DONE\n events ............................................................................................................................... 5.05ms DONE\n routes ............................................................................................................................... 1.83ms DONE\n views ................................................................................................................................ 4.91ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 37.77ms DONE\n cache ............................................................................................................................... 58.83ms DONE\n compiled ............................................................................................................................. 9.93ms DONE\n events .............................................................................................................................. 12.23ms DONE\n routes ............................................................................................................................... 5.02ms DONE\n views ............................................................................................................................... 21.46ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.01ms DONE\n cache ............................................................................................................................... 16.11ms DONE\n compiled ............................................................................................................................. 2.91ms DONE\n events ............................................................................................................................... 2.27ms DONE\n routes ............................................................................................................................... 3.11ms DONE\n views ............................................................................................................................... 18.41ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n SevenShores\\Hubspot\\Exceptions\\BadRequest \n\n Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n\n at vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24\n 20▕ }\n 21▕ \n 22▕ public static function create(RequestException $guzzleException): self\n 23▕ {\n ➜ 24▕ $e = new static(\n 25▕ static::sanitizeResponseMessage($guzzleException->getMessage()),\n 26▕ $guzzleException->getCode(),\n 27▕ $guzzleException\n 28▕ );\n\n +13 vendor frames \n\n 14 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:163\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:51\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 55.84ms DONE\n cache .............................................................................................................................. 108.68ms DONE\n compiled ............................................................................................................................ 22.07ms DONE\n events .............................................................................................................................. 25.86ms DONE\n routes .............................................................................................................................. 19.91ms DONE\n views ............................................................................................................................... 52.25ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n TypeError \n\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83\n 79▕ \n 80▕ // Update reference parameters\n 81▕ $total = $state->total;\n 82▕ $lastRecordId = $state->lastRecordId;\n ➜ 83▕ }\n 84▕ \n 85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool\n 86▕ {\n 87▕ if ($state->hasReachedSafetyLimit()) {\n\n 1 app/Services/Crm/Hubspot/Client.php:195\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), [], \"contact\")\n\n 2 app/Services/Crm/Hubspot/Client.php:176\n Jiminny\\Services\\Crm\\Hubspot\\Client::getPaginatedDataGenerator([], \"contact\")\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.73ms DONE\n cache ............................................................................................................................... 19.13ms DONE\n compiled ............................................................................................................................. 4.93ms DONE\n events ............................................................................................................................... 3.02ms DONE\n routes ............................................................................................................................... 5.55ms DONE\n views ................................................................................................................................ 6.02ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.47ms DONE\n cache ............................................................................................................................... 16.66ms DONE\n compiled ............................................................................................................................. 3.26ms DONE\n events ............................................................................................................................... 3.99ms DONE\n routes ............................................................................................................................... 3.85ms DONE\n views ................................................................................................................................ 4.93ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.42ms DONE\n cache ............................................................................................................................... 23.70ms DONE\n compiled ............................................................................................................................. 3.46ms DONE\n events ............................................................................................................................... 4.30ms DONE\n routes ............................................................................................................................... 8.35ms DONE\n views ................................................................................................................................ 8.00ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.77ms DONE\n cache ............................................................................................................................... 25.55ms DONE\n compiled ............................................................................................................................. 3.87ms DONE\n events ............................................................................................................................... 4.96ms DONE\n routes ............................................................................................................................... 2.23ms DONE\n views ................................................................................................................................ 7.50ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ dev\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status\nOn branch JY-20725-handle-HS-search-rate-limit\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: app/Jobs/Middleware/HandleHubspotRateLimit.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Exceptions/RateLimitException.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Activity/Import/MatchCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Crm/MatchActivityCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Client.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/HubspotClientInterface.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/PaginationState.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.local.bak\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr\n* JY-20725-handle-HS-search-rate-limit\n master\n JY-20818-move-AJ-reports-to-separated-datadog-metric\n JY-20773-fix-automated-reports-user-pilot-tracking\n JY-20157-AJ-report-not-send-notification\n JY-20508-notify-before-AJ-report-expiration\n JY-20372-ai-reports-promotion-pages\n JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null\n JY-20738-debug-AJ-tracking-UP\n a\n JY-18909-automated-reports-ask-jiminny\n JY-20692-fix-integration-app-token-auth-response-change\n JY-20553-debug-crm-sync-delays\n JY-20698-fix-SF-activity-types-on-new-playbook\n JY-20543-AJ-report-tracking\n JY-20384-handle-auto-sync-with-no-access-to-event-type\n JY-20458-ask-jiminny-user-definitions\n JY-19666-fix-import-contacts-account-association\n JY-19666-HS-import-contacts-and-accounts-batch-job\n JY-20458-Ask-Jiminny-Reports\n JY-20200-batch-update-CRM-objects-Salesforce\n JY-19666-HS-webhooks-add-contact-and-company\n JY-20348-trigger-setup-DI-layout-on-team-creation\n JY-20326-refactor-info-message-in-command\n JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled\n JY-20312-remove-on-update-change-last-synced-at-crm-configurations\n JY-20306-SF-skip-auto-sync-for-task-based-playbook\n JY-20192-remove-deleted-team-from-saved-search-filters\n JY-20197-import-opportunity-batch-job\n JY-20293-enable-status-field-for-pipedrive-deals\n JY-20191-remove-commands-interactive-prompts\n JY-20118-change-default-sync-strategy\n JY-20183-add-cache-on-auto-log-delay\n JY-20197-add-import-opportunity-batch-job\n 20118-hs-opportunity-make-webhook-strategy-default\n JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based\n JY-20196-handle-opportunity-without-note\n JY-20118-improve-opportunity-import\n JY-20189-handle-activity-search-on-deleted-groups\n JY-20160\n JY-20145-filter-out-converted-leads-when-matching\n JY-20150-skip-push-summary-on-summary-ready-if-autolog\n JY-20132-fix-note-encoding\n JY-19792-clean-logs\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\n\n Illuminate\\Database\\QueryException \n\n SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)\n\n at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838\n 834▕ $exceptionType = $this->isUniqueConstraintError($e)\n 835▕ ? UniqueConstraintViolationException::class\n 836▕ : QueryException::class;\n 837▕ \n ➜ 838▕ throw new $exceptionType(\n 839▕ $this->getNameWithReadWriteType(),\n 840▕ $query,\n 841▕ $this->prepareBindings($bindings),\n 842▕ $e,\n\n +11 vendor frames \n\n 12 app/Console/Commands/JiminnyDebugCommand.php:380\n Illuminate\\Database\\Eloquent\\Builder::get()\n\n 13 app/Console/Commands/JiminnyDebugCommand.php:49\n Jiminny\\Console\\Commands\\JiminnyDebugCommand::simulateMatchActivityStorm()\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.01ms DONE\n cache ............................................................................................................................... 38.00ms DONE\n compiled ............................................................................................................................. 1.78ms DONE\n events ............................................................................................................................... 1.13ms DONE\n routes ............................................................................................................................... 1.56ms DONE\n views ................................................................................................................................ 3.25ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.34ms DONE\n cache ............................................................................................................................... 11.98ms DONE\n compiled ............................................................................................................................. 2.10ms DONE\n events ............................................................................................................................... 5.31ms DONE\n routes ............................................................................................................................... 2.90ms DONE\n views ............................................................................................................................... 13.11ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.53ms DONE\n cache .............................................................................................................................. 128.25ms DONE\n compiled ............................................................................................................................. 1.73ms DONE\n events ............................................................................................................................... 1.07ms DONE\n routes ............................................................................................................................... 1.45ms DONE\n views ................................................................................................................................ 5.46ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 69.57ms DONE\n cache .............................................................................................................................. 285.32ms DONE\n compiled ............................................................................................................................ 13.02ms DONE\n events .............................................................................................................................. 11.48ms DONE\n routes ............................................................................................................................... 6.30ms DONE\n views ............................................................................................................................... 51.86ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-audio:worker-audio_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 59.22ms DONE\n cache ............................................................................................................................... 97.76ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 4.67ms DONE\n routes .............................................................................................................................. 11.57ms DONE\n views ............................................................................................................................... 18.54ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 5.16ms DONE\n cache ............................................................................................................................... 27.20ms DONE\n compiled ............................................................................................................................. 2.01ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.13ms DONE\n views ............................................................................................................................... 15.28ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny#","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"}]...
|
8358287232746116441
|
4435031406530046724
|
click
|
accessibility
|
NULL
|
config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSW config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSWORD_DOTS] 21.31ms DONE
compiled [PASSWORD_DOTS] 3.11ms DONE
events [PASSWORD_DOTS] 5.05ms DONE
routes [PASSWORD_DOTS] 1.83ms DONE
views [PASSWORD_DOTS] 4.91ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 37.77ms DONE
cache [PASSWORD_DOTS] 58.83ms DONE
compiled [PASSWORD_DOTS] 9.93ms DONE
events [PASSWORD_DOTS] 12.23ms DONE
routes [PASSWORD_DOTS] 5.02ms DONE
views [PASSWORD_DOTS] 21.46ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.01ms DONE
cache [PASSWORD_DOTS] 16.11ms DONE
compiled [PASSWORD_DOTS] 2.91ms DONE
events [PASSWORD_DOTS] 2.27ms DONE
routes [PASSWORD_DOTS] 3.11ms DONE
views [PASSWORD_DOTS] 18.41ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
SevenShores\Hubspot\Exceptions\BadRequest
Client error: `POST [URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 55.84ms DONE
cache [PASSWORD_DOTS] 108.68ms DONE
compiled [PASSWORD_DOTS] 22.07ms DONE
events [PASSWORD_DOTS] 25.86ms DONE
routes [PASSWORD_DOTS] 19.91ms DONE
views [PASSWORD_DOTS] 52.25ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-audio:worker-audio_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
TypeError
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83
79▕
80▕ // Update reference parameters
81▕ $total = $state->total;
82▕ $lastRecordId = $state->lastRecordId;
➜ 83▕ }
84▕
85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool
86▕ {
87▕ if ($state->hasReachedSafetyLimit()) {
1 app/Services/Crm/Hubspot/Client.php:195
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\Services\Crm\Hubspot\Client), [], "contact")
2 app/Services/Crm/Hubspot/Client.php:176
Jiminny\Services\Crm\Hubspot\Client::getPaginatedDataGenerator([], "contact")
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.73ms DONE
cache [PASSWORD_DOTS] 19.13ms DONE
compiled [PASSWORD_DOTS] 4.93ms DONE
events [PASSWORD_DOTS] 3.02ms DONE
routes [PASSWORD_DOTS] 5.55ms DONE
views [PASSWORD_DOTS] 6.02ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 4.47ms DONE
cache [PASSWORD_DOTS] 16.66ms DONE
compiled [PASSWORD_DOTS] 3.26ms DONE
events [PASSWORD_DOTS] 3.99ms DONE
routes [PASSWORD_DOTS] 3.85ms DONE
views [PASSWORD_DOTS] 4.93ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.42ms DONE
cache [PASSWORD_DOTS] 23.70ms DONE
compiled [PASSWORD_DOTS] 3.46ms DONE
events [PASSWORD_DOTS] 4.30ms DONE
routes [PASSWORD_DOTS] 8.35ms DONE
views [PASSWORD_DOTS] 8.00ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.77ms DONE
cache [PASSWORD_DOTS] 25.55ms DONE
compiled [PASSWORD_DOTS] 3.87ms DONE
events [PASSWORD_DOTS] 4.96ms DONE
routes [PASSWORD_DOTS] 2.23ms DONE
views [PASSWORD_DOTS] 7.50ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
root@docker_lamp_1:/home/jiminny#
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status
On branch JY-20725-handle-HS-search-rate-limit
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: app/Jobs/Middleware/HandleHubspotRateLimit.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Exceptions/RateLimitException.php
modified: app/Jobs/Activity/Import/MatchCrmData.php
modified: app/Jobs/Crm/MatchActivityCrmData.php
modified: app/Services/Crm/Hubspot/Client.php
modified: app/Services/Crm/Hubspot/HubspotClientInterface.php
modified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php
modified: app/Services/Crm/Hubspot/Pagination/PaginationState.php
modified: app/Services/Crm/Hubspot/Service.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.local.bak
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr
* JY-20725-handle-HS-search-rate-limit
master
JY-20818-move-AJ-reports-to-separated-datadog-metric
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20157-AJ-report-not-send-notification
JY-20508-notify-before-AJ-report-expiration
JY-20372-ai-reports-promotion-pages
JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null
JY-20738-debug-AJ-tracking-UP
a
JY-18909-automated-reports-ask-jiminny
JY-20692-fix-integration-app-[API_KEY]
JY-20553-debug-crm-sync-delays
JY-20698-fix-SF-activity-types-on-new-playbook
JY-20543-AJ-report-tracking
JY-20384-handle-auto-sync-with-no-access-to-event-type
JY-20458-ask-jiminny-user-definitions
JY-19666-fix-import-contacts-account-association
JY-19666-HS-import-contacts-and-accounts-batch-job
JY-20458-Ask-Jiminny-Reports
JY-20200-batch-update-CRM-objects-Salesforce
JY-19666-HS-webhooks-add-contact-and-company
JY-20348-trigger-setup-DI-layout-on-team-creation
JY-20326-refactor-info-message-in-command
JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled
JY-20312-remove-on-update-change-last-synced-at-crm-configurations
JY-20306-SF-skip-auto-sync-for-task-based-playbook
JY-20192-remove-deleted-team-from-saved-search-filters
JY-20197-import-opportunity-batch-job
JY-20293-enable-status-field-for-pipedrive-deals
JY-20191-remove-commands-interactive-prompts
JY-20118-change-default-sync-strategy
JY-20183-add-cache-on-auto-log-delay
JY-20197-add-import-opportunity-batch-job
20118-hs-opportunity-make-webhook-strategy-default
JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based
JY-20196-handle-opportunity-without-note
JY-20118-improve-opportunity-import
JY-20189-handle-activity-search-on-deleted-groups
JY-20160
JY-20145-filter-out-converted-leads-when-matching
JY-20150-skip-push-summary-on-summary-ready-if-autolog
JY-20132-fix-note-encoding
JY-19792-clean-logs
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
+11 vendor frames
12 app/Console/Commands/JiminnyDebugCommand.php:380
Illuminate\Database\Eloquent\Builder::get()
13 app/Console/Commands/JiminnyDebugCommand.php:49
Jiminny\Console\Commands\JiminnyDebugCommand::simulateMatchActivityStorm()
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.01ms DONE
cache [PASSWORD_DOTS] 38.00ms DONE
compiled [PASSWORD_DOTS] 1.78ms DONE
events [PASSWORD_DOTS] 1.13ms DONE
routes [PASSWORD_DOTS] 1.56ms DONE
views [PASSWORD_DOTS] 3.25ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-audio:worker-audio_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.34ms DONE
cache [PASSWORD_DOTS] 11.98ms DONE
compiled [PASSWORD_DOTS] 2.10ms DONE
events [PASSWORD_DOTS] 5.31ms DONE
routes [PASSWORD_DOTS] 2.90ms DONE
views [PASSWORD_DOTS] 13.11ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.53ms DONE
cache [PASSWORD_DOTS] 128.25ms DONE
compiled [PASSWORD_DOTS] 1.73ms DONE
events [PASSWORD_DOTS] 1.07ms DONE
routes [PASSWORD_DOTS] 1.45ms DONE
views [PASSWORD_DOTS] 5.46ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-emails:worker-emails_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 69.57ms DONE
cache [PASSWORD_DOTS] 285.32ms DONE
compiled [PASSWORD_DOTS] 13.02ms DONE
events [PASSWORD_DOTS] 11.48ms DONE
routes [PASSWORD_DOTS] 6.30ms DONE
views [PASSWORD_DOTS] 51.86ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-emails:worker-emails_00: stopped
worker-audio:worker-audio_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 59.22ms DONE
cache [PASSWORD_DOTS] 97.76ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 4.67ms DONE
routes [PASSWORD_DOTS] 11.57ms DONE
views [PASSWORD_DOTS] 18.54ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-emails:worker-emails_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-crm-sync:worke...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18358
|
793
|
33
|
2026-05-11T11:12:57.807854+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497977807_m2.jpg...
|
iTerm2
|
DEV (docker)
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSW config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSWORD_DOTS] 21.31ms DONE
compiled [PASSWORD_DOTS] 3.11ms DONE
events [PASSWORD_DOTS] 5.05ms DONE
routes [PASSWORD_DOTS] 1.83ms DONE
views [PASSWORD_DOTS] 4.91ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 37.77ms DONE
cache [PASSWORD_DOTS] 58.83ms DONE
compiled [PASSWORD_DOTS] 9.93ms DONE
events [PASSWORD_DOTS] 12.23ms DONE
routes [PASSWORD_DOTS] 5.02ms DONE
views [PASSWORD_DOTS] 21.46ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.01ms DONE
cache [PASSWORD_DOTS] 16.11ms DONE
compiled [PASSWORD_DOTS] 2.91ms DONE
events [PASSWORD_DOTS] 2.27ms DONE
routes [PASSWORD_DOTS] 3.11ms DONE
views [PASSWORD_DOTS] 18.41ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
SevenShores\Hubspot\Exceptions\BadRequest
Client error: `POST [URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 55.84ms DONE
cache [PASSWORD_DOTS] 108.68ms DONE
compiled [PASSWORD_DOTS] 22.07ms DONE
events [PASSWORD_DOTS] 25.86ms DONE
routes [PASSWORD_DOTS] 19.91ms DONE
views [PASSWORD_DOTS] 52.25ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-audio:worker-audio_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
TypeError
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83
79▕
80▕ // Update reference parameters
81▕ $total = $state->total;
82▕ $lastRecordId = $state->lastRecordId;
➜ 83▕ }
84▕
85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool
86▕ {
87▕ if ($state->hasReachedSafetyLimit()) {
1 app/Services/Crm/Hubspot/Client.php:195
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\Services\Crm\Hubspot\Client), [], "contact")
2 app/Services/Crm/Hubspot/Client.php:176
Jiminny\Services\Crm\Hubspot\Client::getPaginatedDataGenerator([], "contact")
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.73ms DONE
cache [PASSWORD_DOTS] 19.13ms DONE
compiled [PASSWORD_DOTS] 4.93ms DONE
events [PASSWORD_DOTS] 3.02ms DONE
routes [PASSWORD_DOTS] 5.55ms DONE
views [PASSWORD_DOTS] 6.02ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 4.47ms DONE
cache [PASSWORD_DOTS] 16.66ms DONE
compiled [PASSWORD_DOTS] 3.26ms DONE
events [PASSWORD_DOTS] 3.99ms DONE
routes [PASSWORD_DOTS] 3.85ms DONE
views [PASSWORD_DOTS] 4.93ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.42ms DONE
cache [PASSWORD_DOTS] 23.70ms DONE
compiled [PASSWORD_DOTS] 3.46ms DONE
events [PASSWORD_DOTS] 4.30ms DONE
routes [PASSWORD_DOTS] 8.35ms DONE
views [PASSWORD_DOTS] 8.00ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.77ms DONE
cache [PASSWORD_DOTS] 25.55ms DONE
compiled [PASSWORD_DOTS] 3.87ms DONE
events [PASSWORD_DOTS] 4.96ms DONE
routes [PASSWORD_DOTS] 2.23ms DONE
views [PASSWORD_DOTS] 7.50ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
root@docker_lamp_1:/home/jiminny#
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status
On branch JY-20725-handle-HS-search-rate-limit
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: app/Jobs/Middleware/HandleHubspotRateLimit.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Exceptions/RateLimitException.php
modified: app/Jobs/Activity/Import/MatchCrmData.php
modified: app/Jobs/Crm/MatchActivityCrmData.php
modified: app/Services/Crm/Hubspot/Client.php
modified: app/Services/Crm/Hubspot/HubspotClientInterface.php
modified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php
modified: app/Services/Crm/Hubspot/Pagination/PaginationState.php
modified: app/Services/Crm/Hubspot/Service.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.local.bak
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr
* JY-20725-handle-HS-search-rate-limit
master
JY-20818-move-AJ-reports-to-separated-datadog-metric
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20157-AJ-report-not-send-notification
JY-20508-notify-before-AJ-report-expiration
JY-20372-ai-reports-promotion-pages
JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null
JY-20738-debug-AJ-tracking-UP
a
JY-18909-automated-reports-ask-jiminny
JY-20692-fix-integration-app-[API_KEY]
JY-20553-debug-crm-sync-delays
JY-20698-fix-SF-activity-types-on-new-playbook
JY-20543-AJ-report-tracking
JY-20384-handle-auto-sync-with-no-access-to-event-type
JY-20458-ask-jiminny-user-definitions
JY-19666-fix-import-contacts-account-association
JY-19666-HS-import-contacts-and-accounts-batch-job
JY-20458-Ask-Jiminny-Reports
JY-20200-batch-update-CRM-objects-Salesforce
JY-19666-HS-webhooks-add-contact-and-company
JY-20348-trigger-setup-DI-layout-on-team-creation
JY-20326-refactor-info-message-in-command
JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled
JY-20312-remove-on-update-change-last-synced-at-crm-configurations
JY-20306-SF-skip-auto-sync-for-task-based-playbook
JY-20192-remove-deleted-team-from-saved-search-filters
JY-20197-import-opportunity-batch-job
JY-20293-enable-status-field-for-pipedrive-deals
JY-20191-remove-commands-interactive-prompts
JY-20118-change-default-sync-strategy
JY-20183-add-cache-on-auto-log-delay
JY-20197-add-import-opportunity-batch-job
20118-hs-opportunity-make-webhook-strategy-default
JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based
JY-20196-handle-opportunity-without-note
JY-20118-improve-opportunity-import
JY-20189-handle-activity-search-on-deleted-groups
JY-20160
JY-20145-filter-out-converted-leads-when-matching
JY-20150-skip-push-summary-on-summary-ready-if-autolog
JY-20132-fix-note-encoding
JY-19792-clean-logs
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
+11 vendor frames
12 app/Console/Commands/JiminnyDebugCommand.php:380
Illuminate\Database\Eloquent\Builder::get()
13 app/Console/Commands/JiminnyDebugCommand.php:49
Jiminny\Console\Commands\JiminnyDebugCommand::simulateMatchActivityStorm()
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.01ms DONE
cache [PASSWORD_DOTS] 38.00ms DONE
compiled [PASSWORD_DOTS] 1.78ms DONE
events [PASSWORD_DOTS] 1.13ms DONE
routes [PASSWORD_DOTS] 1.56ms DONE
views [PASSWORD_DOTS] 3.25ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-audio:worker-audio_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.34ms DONE
cache [PASSWORD_DOTS] 11.98ms DONE
compiled [PASSWORD_DOTS] 2.10ms DONE
events [PASSWORD_DOTS] 5.31ms DONE
routes [PASSWORD_DOTS] 2.90ms DONE
views [PASSWORD_DOTS] 13.11ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.53ms DONE
cache [PASSWORD_DOTS] 128.25ms DONE
compiled [PASSWORD_DOTS] 1.73ms DONE
events [PASSWORD_DOTS] 1.07ms DONE
routes [PASSWORD_DOTS] 1.45ms DONE
views [PASSWORD_DOTS] 5.46ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-emails:worker-emails_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 69.57ms DONE
cache [PASSWORD_DOTS] 285.32ms DONE
compiled [PASSWORD_DOTS] 13.02ms DONE
events [PASSWORD_DOTS] 11.48ms DONE
routes [PASSWORD_DOTS] 6.30ms DONE
views [PASSWORD_DOTS] 51.86ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-emails:worker-emails_00: stopped
worker-audio:worker-audio_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 59.22ms DONE
cache [PASSWORD_DOTS] 97.76ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 4.67ms DONE
routes [PASSWORD_DOTS] 11.57ms DONE
views [PASSWORD_DOTS] 18.54ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-emails:worker-emails_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-crm-sync:worke...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"config .............................................................................................................................. 10.49ms DONE\n cache ............................................................................................................................... 21.31ms DONE\n compiled ............................................................................................................................. 3.11ms DONE\n events ............................................................................................................................... 5.05ms DONE\n routes ............................................................................................................................... 1.83ms DONE\n views ................................................................................................................................ 4.91ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 37.77ms DONE\n cache ............................................................................................................................... 58.83ms DONE\n compiled ............................................................................................................................. 9.93ms DONE\n events .............................................................................................................................. 12.23ms DONE\n routes ............................................................................................................................... 5.02ms DONE\n views ............................................................................................................................... 21.46ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.01ms DONE\n cache ............................................................................................................................... 16.11ms DONE\n compiled ............................................................................................................................. 2.91ms DONE\n events ............................................................................................................................... 2.27ms DONE\n routes ............................................................................................................................... 3.11ms DONE\n views ............................................................................................................................... 18.41ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n SevenShores\\Hubspot\\Exceptions\\BadRequest \n\n Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n\n at vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24\n 20▕ }\n 21▕ \n 22▕ public static function create(RequestException $guzzleException): self\n 23▕ {\n ➜ 24▕ $e = new static(\n 25▕ static::sanitizeResponseMessage($guzzleException->getMessage()),\n 26▕ $guzzleException->getCode(),\n 27▕ $guzzleException\n 28▕ );\n\n +13 vendor frames \n\n 14 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:163\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:51\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 55.84ms DONE\n cache .............................................................................................................................. 108.68ms DONE\n compiled ............................................................................................................................ 22.07ms DONE\n events .............................................................................................................................. 25.86ms DONE\n routes .............................................................................................................................. 19.91ms DONE\n views ............................................................................................................................... 52.25ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n TypeError \n\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83\n 79▕ \n 80▕ // Update reference parameters\n 81▕ $total = $state->total;\n 82▕ $lastRecordId = $state->lastRecordId;\n ➜ 83▕ }\n 84▕ \n 85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool\n 86▕ {\n 87▕ if ($state->hasReachedSafetyLimit()) {\n\n 1 app/Services/Crm/Hubspot/Client.php:195\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), [], \"contact\")\n\n 2 app/Services/Crm/Hubspot/Client.php:176\n Jiminny\\Services\\Crm\\Hubspot\\Client::getPaginatedDataGenerator([], \"contact\")\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.73ms DONE\n cache ............................................................................................................................... 19.13ms DONE\n compiled ............................................................................................................................. 4.93ms DONE\n events ............................................................................................................................... 3.02ms DONE\n routes ............................................................................................................................... 5.55ms DONE\n views ................................................................................................................................ 6.02ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.47ms DONE\n cache ............................................................................................................................... 16.66ms DONE\n compiled ............................................................................................................................. 3.26ms DONE\n events ............................................................................................................................... 3.99ms DONE\n routes ............................................................................................................................... 3.85ms DONE\n views ................................................................................................................................ 4.93ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.42ms DONE\n cache ............................................................................................................................... 23.70ms DONE\n compiled ............................................................................................................................. 3.46ms DONE\n events ............................................................................................................................... 4.30ms DONE\n routes ............................................................................................................................... 8.35ms DONE\n views ................................................................................................................................ 8.00ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.77ms DONE\n cache ............................................................................................................................... 25.55ms DONE\n compiled ............................................................................................................................. 3.87ms DONE\n events ............................................................................................................................... 4.96ms DONE\n routes ............................................................................................................................... 2.23ms DONE\n views ................................................................................................................................ 7.50ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ dev\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status\nOn branch JY-20725-handle-HS-search-rate-limit\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: app/Jobs/Middleware/HandleHubspotRateLimit.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Exceptions/RateLimitException.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Activity/Import/MatchCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Crm/MatchActivityCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Client.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/HubspotClientInterface.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/PaginationState.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.local.bak\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr\n* JY-20725-handle-HS-search-rate-limit\n master\n JY-20818-move-AJ-reports-to-separated-datadog-metric\n JY-20773-fix-automated-reports-user-pilot-tracking\n JY-20157-AJ-report-not-send-notification\n JY-20508-notify-before-AJ-report-expiration\n JY-20372-ai-reports-promotion-pages\n JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null\n JY-20738-debug-AJ-tracking-UP\n a\n JY-18909-automated-reports-ask-jiminny\n JY-20692-fix-integration-app-token-auth-response-change\n JY-20553-debug-crm-sync-delays\n JY-20698-fix-SF-activity-types-on-new-playbook\n JY-20543-AJ-report-tracking\n JY-20384-handle-auto-sync-with-no-access-to-event-type\n JY-20458-ask-jiminny-user-definitions\n JY-19666-fix-import-contacts-account-association\n JY-19666-HS-import-contacts-and-accounts-batch-job\n JY-20458-Ask-Jiminny-Reports\n JY-20200-batch-update-CRM-objects-Salesforce\n JY-19666-HS-webhooks-add-contact-and-company\n JY-20348-trigger-setup-DI-layout-on-team-creation\n JY-20326-refactor-info-message-in-command\n JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled\n JY-20312-remove-on-update-change-last-synced-at-crm-configurations\n JY-20306-SF-skip-auto-sync-for-task-based-playbook\n JY-20192-remove-deleted-team-from-saved-search-filters\n JY-20197-import-opportunity-batch-job\n JY-20293-enable-status-field-for-pipedrive-deals\n JY-20191-remove-commands-interactive-prompts\n JY-20118-change-default-sync-strategy\n JY-20183-add-cache-on-auto-log-delay\n JY-20197-add-import-opportunity-batch-job\n 20118-hs-opportunity-make-webhook-strategy-default\n JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based\n JY-20196-handle-opportunity-without-note\n JY-20118-improve-opportunity-import\n JY-20189-handle-activity-search-on-deleted-groups\n JY-20160\n JY-20145-filter-out-converted-leads-when-matching\n JY-20150-skip-push-summary-on-summary-ready-if-autolog\n JY-20132-fix-note-encoding\n JY-19792-clean-logs\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\n\n Illuminate\\Database\\QueryException \n\n SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)\n\n at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838\n 834▕ $exceptionType = $this->isUniqueConstraintError($e)\n 835▕ ? UniqueConstraintViolationException::class\n 836▕ : QueryException::class;\n 837▕ \n ➜ 838▕ throw new $exceptionType(\n 839▕ $this->getNameWithReadWriteType(),\n 840▕ $query,\n 841▕ $this->prepareBindings($bindings),\n 842▕ $e,\n\n +11 vendor frames \n\n 12 app/Console/Commands/JiminnyDebugCommand.php:380\n Illuminate\\Database\\Eloquent\\Builder::get()\n\n 13 app/Console/Commands/JiminnyDebugCommand.php:49\n Jiminny\\Console\\Commands\\JiminnyDebugCommand::simulateMatchActivityStorm()\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.01ms DONE\n cache ............................................................................................................................... 38.00ms DONE\n compiled ............................................................................................................................. 1.78ms DONE\n events ............................................................................................................................... 1.13ms DONE\n routes ............................................................................................................................... 1.56ms DONE\n views ................................................................................................................................ 3.25ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.34ms DONE\n cache ............................................................................................................................... 11.98ms DONE\n compiled ............................................................................................................................. 2.10ms DONE\n events ............................................................................................................................... 5.31ms DONE\n routes ............................................................................................................................... 2.90ms DONE\n views ............................................................................................................................... 13.11ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.53ms DONE\n cache .............................................................................................................................. 128.25ms DONE\n compiled ............................................................................................................................. 1.73ms DONE\n events ............................................................................................................................... 1.07ms DONE\n routes ............................................................................................................................... 1.45ms DONE\n views ................................................................................................................................ 5.46ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 69.57ms DONE\n cache .............................................................................................................................. 285.32ms DONE\n compiled ............................................................................................................................ 13.02ms DONE\n events .............................................................................................................................. 11.48ms DONE\n routes ............................................................................................................................... 6.30ms DONE\n views ............................................................................................................................... 51.86ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-audio:worker-audio_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 59.22ms DONE\n cache ............................................................................................................................... 97.76ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 4.67ms DONE\n routes .............................................................................................................................. 11.57ms DONE\n views ............................................................................................................................... 18.54ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 5.16ms DONE\n cache ............................................................................................................................... 27.20ms DONE\n compiled ............................................................................................................................. 2.01ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.13ms DONE\n views ............................................................................................................................... 15.28ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny#","depth":4,"on_screen":true,"value":"config .............................................................................................................................. 10.49ms DONE\n cache ............................................................................................................................... 21.31ms DONE\n compiled ............................................................................................................................. 3.11ms DONE\n events ............................................................................................................................... 5.05ms DONE\n routes ............................................................................................................................... 1.83ms DONE\n views ................................................................................................................................ 4.91ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 37.77ms DONE\n cache ............................................................................................................................... 58.83ms DONE\n compiled ............................................................................................................................. 9.93ms DONE\n events .............................................................................................................................. 12.23ms DONE\n routes ............................................................................................................................... 5.02ms DONE\n views ............................................................................................................................... 21.46ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.01ms DONE\n cache ............................................................................................................................... 16.11ms DONE\n compiled ............................................................................................................................. 2.91ms DONE\n events ............................................................................................................................... 2.27ms DONE\n routes ............................................................................................................................... 3.11ms DONE\n views ............................................................................................................................... 18.41ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n SevenShores\\Hubspot\\Exceptions\\BadRequest \n\n Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n\n at vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24\n 20▕ }\n 21▕ \n 22▕ public static function create(RequestException $guzzleException): self\n 23▕ {\n ➜ 24▕ $e = new static(\n 25▕ static::sanitizeResponseMessage($guzzleException->getMessage()),\n 26▕ $guzzleException->getCode(),\n 27▕ $guzzleException\n 28▕ );\n\n +13 vendor frames \n\n 14 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:163\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:51\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 55.84ms DONE\n cache .............................................................................................................................. 108.68ms DONE\n compiled ............................................................................................................................ 22.07ms DONE\n events .............................................................................................................................. 25.86ms DONE\n routes .............................................................................................................................. 19.91ms DONE\n views ............................................................................................................................... 52.25ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n TypeError \n\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83\n 79▕ \n 80▕ // Update reference parameters\n 81▕ $total = $state->total;\n 82▕ $lastRecordId = $state->lastRecordId;\n ➜ 83▕ }\n 84▕ \n 85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool\n 86▕ {\n 87▕ if ($state->hasReachedSafetyLimit()) {\n\n 1 app/Services/Crm/Hubspot/Client.php:195\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), [], \"contact\")\n\n 2 app/Services/Crm/Hubspot/Client.php:176\n Jiminny\\Services\\Crm\\Hubspot\\Client::getPaginatedDataGenerator([], \"contact\")\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.73ms DONE\n cache ............................................................................................................................... 19.13ms DONE\n compiled ............................................................................................................................. 4.93ms DONE\n events ............................................................................................................................... 3.02ms DONE\n routes ............................................................................................................................... 5.55ms DONE\n views ................................................................................................................................ 6.02ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.47ms DONE\n cache ............................................................................................................................... 16.66ms DONE\n compiled ............................................................................................................................. 3.26ms DONE\n events ............................................................................................................................... 3.99ms DONE\n routes ............................................................................................................................... 3.85ms DONE\n views ................................................................................................................................ 4.93ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.42ms DONE\n cache ............................................................................................................................... 23.70ms DONE\n compiled ............................................................................................................................. 3.46ms DONE\n events ............................................................................................................................... 4.30ms DONE\n routes ............................................................................................................................... 8.35ms DONE\n views ................................................................................................................................ 8.00ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.77ms DONE\n cache ............................................................................................................................... 25.55ms DONE\n compiled ............................................................................................................................. 3.87ms DONE\n events ............................................................................................................................... 4.96ms DONE\n routes ............................................................................................................................... 2.23ms DONE\n views ................................................................................................................................ 7.50ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ dev\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status\nOn branch JY-20725-handle-HS-search-rate-limit\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: app/Jobs/Middleware/HandleHubspotRateLimit.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Exceptions/RateLimitException.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Activity/Import/MatchCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Crm/MatchActivityCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Client.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/HubspotClientInterface.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/PaginationState.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.local.bak\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr\n* JY-20725-handle-HS-search-rate-limit\n master\n JY-20818-move-AJ-reports-to-separated-datadog-metric\n JY-20773-fix-automated-reports-user-pilot-tracking\n JY-20157-AJ-report-not-send-notification\n JY-20508-notify-before-AJ-report-expiration\n JY-20372-ai-reports-promotion-pages\n JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null\n JY-20738-debug-AJ-tracking-UP\n a\n JY-18909-automated-reports-ask-jiminny\n JY-20692-fix-integration-app-token-auth-response-change\n JY-20553-debug-crm-sync-delays\n JY-20698-fix-SF-activity-types-on-new-playbook\n JY-20543-AJ-report-tracking\n JY-20384-handle-auto-sync-with-no-access-to-event-type\n JY-20458-ask-jiminny-user-definitions\n JY-19666-fix-import-contacts-account-association\n JY-19666-HS-import-contacts-and-accounts-batch-job\n JY-20458-Ask-Jiminny-Reports\n JY-20200-batch-update-CRM-objects-Salesforce\n JY-19666-HS-webhooks-add-contact-and-company\n JY-20348-trigger-setup-DI-layout-on-team-creation\n JY-20326-refactor-info-message-in-command\n JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled\n JY-20312-remove-on-update-change-last-synced-at-crm-configurations\n JY-20306-SF-skip-auto-sync-for-task-based-playbook\n JY-20192-remove-deleted-team-from-saved-search-filters\n JY-20197-import-opportunity-batch-job\n JY-20293-enable-status-field-for-pipedrive-deals\n JY-20191-remove-commands-interactive-prompts\n JY-20118-change-default-sync-strategy\n JY-20183-add-cache-on-auto-log-delay\n JY-20197-add-import-opportunity-batch-job\n 20118-hs-opportunity-make-webhook-strategy-default\n JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based\n JY-20196-handle-opportunity-without-note\n JY-20118-improve-opportunity-import\n JY-20189-handle-activity-search-on-deleted-groups\n JY-20160\n JY-20145-filter-out-converted-leads-when-matching\n JY-20150-skip-push-summary-on-summary-ready-if-autolog\n JY-20132-fix-note-encoding\n JY-19792-clean-logs\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\n\n Illuminate\\Database\\QueryException \n\n SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)\n\n at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838\n 834▕ $exceptionType = $this->isUniqueConstraintError($e)\n 835▕ ? UniqueConstraintViolationException::class\n 836▕ : QueryException::class;\n 837▕ \n ➜ 838▕ throw new $exceptionType(\n 839▕ $this->getNameWithReadWriteType(),\n 840▕ $query,\n 841▕ $this->prepareBindings($bindings),\n 842▕ $e,\n\n +11 vendor frames \n\n 12 app/Console/Commands/JiminnyDebugCommand.php:380\n Illuminate\\Database\\Eloquent\\Builder::get()\n\n 13 app/Console/Commands/JiminnyDebugCommand.php:49\n Jiminny\\Console\\Commands\\JiminnyDebugCommand::simulateMatchActivityStorm()\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.01ms DONE\n cache ............................................................................................................................... 38.00ms DONE\n compiled ............................................................................................................................. 1.78ms DONE\n events ............................................................................................................................... 1.13ms DONE\n routes ............................................................................................................................... 1.56ms DONE\n views ................................................................................................................................ 3.25ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.34ms DONE\n cache ............................................................................................................................... 11.98ms DONE\n compiled ............................................................................................................................. 2.10ms DONE\n events ............................................................................................................................... 5.31ms DONE\n routes ............................................................................................................................... 2.90ms DONE\n views ............................................................................................................................... 13.11ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.53ms DONE\n cache .............................................................................................................................. 128.25ms DONE\n compiled ............................................................................................................................. 1.73ms DONE\n events ............................................................................................................................... 1.07ms DONE\n routes ............................................................................................................................... 1.45ms DONE\n views ................................................................................................................................ 5.46ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 69.57ms DONE\n cache .............................................................................................................................. 285.32ms DONE\n compiled ............................................................................................................................ 13.02ms DONE\n events .............................................................................................................................. 11.48ms DONE\n routes ............................................................................................................................... 6.30ms DONE\n views ............................................................................................................................... 51.86ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-audio:worker-audio_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 59.22ms DONE\n cache ............................................................................................................................... 97.76ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 4.67ms DONE\n routes .............................................................................................................................. 11.57ms DONE\n views ............................................................................................................................... 18.54ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 5.16ms DONE\n cache ............................................................................................................................... 27.20ms DONE\n compiled ............................................................................................................................. 2.01ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.13ms DONE\n views ............................................................................................................................... 15.28ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny#","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.33759972,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33959442,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.40492022,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4069149,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.4722407,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8358287232746116441
|
4435031406530046724
|
visual_change
|
accessibility
|
NULL
|
config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSW config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSWORD_DOTS] 21.31ms DONE
compiled [PASSWORD_DOTS] 3.11ms DONE
events [PASSWORD_DOTS] 5.05ms DONE
routes [PASSWORD_DOTS] 1.83ms DONE
views [PASSWORD_DOTS] 4.91ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 37.77ms DONE
cache [PASSWORD_DOTS] 58.83ms DONE
compiled [PASSWORD_DOTS] 9.93ms DONE
events [PASSWORD_DOTS] 12.23ms DONE
routes [PASSWORD_DOTS] 5.02ms DONE
views [PASSWORD_DOTS] 21.46ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.01ms DONE
cache [PASSWORD_DOTS] 16.11ms DONE
compiled [PASSWORD_DOTS] 2.91ms DONE
events [PASSWORD_DOTS] 2.27ms DONE
routes [PASSWORD_DOTS] 3.11ms DONE
views [PASSWORD_DOTS] 18.41ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
SevenShores\Hubspot\Exceptions\BadRequest
Client error: `POST [URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 55.84ms DONE
cache [PASSWORD_DOTS] 108.68ms DONE
compiled [PASSWORD_DOTS] 22.07ms DONE
events [PASSWORD_DOTS] 25.86ms DONE
routes [PASSWORD_DOTS] 19.91ms DONE
views [PASSWORD_DOTS] 52.25ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-audio:worker-audio_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
TypeError
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83
79▕
80▕ // Update reference parameters
81▕ $total = $state->total;
82▕ $lastRecordId = $state->lastRecordId;
➜ 83▕ }
84▕
85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool
86▕ {
87▕ if ($state->hasReachedSafetyLimit()) {
1 app/Services/Crm/Hubspot/Client.php:195
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\Services\Crm\Hubspot\Client), [], "contact")
2 app/Services/Crm/Hubspot/Client.php:176
Jiminny\Services\Crm\Hubspot\Client::getPaginatedDataGenerator([], "contact")
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.73ms DONE
cache [PASSWORD_DOTS] 19.13ms DONE
compiled [PASSWORD_DOTS] 4.93ms DONE
events [PASSWORD_DOTS] 3.02ms DONE
routes [PASSWORD_DOTS] 5.55ms DONE
views [PASSWORD_DOTS] 6.02ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 4.47ms DONE
cache [PASSWORD_DOTS] 16.66ms DONE
compiled [PASSWORD_DOTS] 3.26ms DONE
events [PASSWORD_DOTS] 3.99ms DONE
routes [PASSWORD_DOTS] 3.85ms DONE
views [PASSWORD_DOTS] 4.93ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.42ms DONE
cache [PASSWORD_DOTS] 23.70ms DONE
compiled [PASSWORD_DOTS] 3.46ms DONE
events [PASSWORD_DOTS] 4.30ms DONE
routes [PASSWORD_DOTS] 8.35ms DONE
views [PASSWORD_DOTS] 8.00ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.77ms DONE
cache [PASSWORD_DOTS] 25.55ms DONE
compiled [PASSWORD_DOTS] 3.87ms DONE
events [PASSWORD_DOTS] 4.96ms DONE
routes [PASSWORD_DOTS] 2.23ms DONE
views [PASSWORD_DOTS] 7.50ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
root@docker_lamp_1:/home/jiminny#
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status
On branch JY-20725-handle-HS-search-rate-limit
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: app/Jobs/Middleware/HandleHubspotRateLimit.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Exceptions/RateLimitException.php
modified: app/Jobs/Activity/Import/MatchCrmData.php
modified: app/Jobs/Crm/MatchActivityCrmData.php
modified: app/Services/Crm/Hubspot/Client.php
modified: app/Services/Crm/Hubspot/HubspotClientInterface.php
modified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php
modified: app/Services/Crm/Hubspot/Pagination/PaginationState.php
modified: app/Services/Crm/Hubspot/Service.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.local.bak
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr
* JY-20725-handle-HS-search-rate-limit
master
JY-20818-move-AJ-reports-to-separated-datadog-metric
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20157-AJ-report-not-send-notification
JY-20508-notify-before-AJ-report-expiration
JY-20372-ai-reports-promotion-pages
JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null
JY-20738-debug-AJ-tracking-UP
a
JY-18909-automated-reports-ask-jiminny
JY-20692-fix-integration-app-[API_KEY]
JY-20553-debug-crm-sync-delays
JY-20698-fix-SF-activity-types-on-new-playbook
JY-20543-AJ-report-tracking
JY-20384-handle-auto-sync-with-no-access-to-event-type
JY-20458-ask-jiminny-user-definitions
JY-19666-fix-import-contacts-account-association
JY-19666-HS-import-contacts-and-accounts-batch-job
JY-20458-Ask-Jiminny-Reports
JY-20200-batch-update-CRM-objects-Salesforce
JY-19666-HS-webhooks-add-contact-and-company
JY-20348-trigger-setup-DI-layout-on-team-creation
JY-20326-refactor-info-message-in-command
JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled
JY-20312-remove-on-update-change-last-synced-at-crm-configurations
JY-20306-SF-skip-auto-sync-for-task-based-playbook
JY-20192-remove-deleted-team-from-saved-search-filters
JY-20197-import-opportunity-batch-job
JY-20293-enable-status-field-for-pipedrive-deals
JY-20191-remove-commands-interactive-prompts
JY-20118-change-default-sync-strategy
JY-20183-add-cache-on-auto-log-delay
JY-20197-add-import-opportunity-batch-job
20118-hs-opportunity-make-webhook-strategy-default
JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based
JY-20196-handle-opportunity-without-note
JY-20118-improve-opportunity-import
JY-20189-handle-activity-search-on-deleted-groups
JY-20160
JY-20145-filter-out-converted-leads-when-matching
JY-20150-skip-push-summary-on-summary-ready-if-autolog
JY-20132-fix-note-encoding
JY-19792-clean-logs
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
+11 vendor frames
12 app/Console/Commands/JiminnyDebugCommand.php:380
Illuminate\Database\Eloquent\Builder::get()
13 app/Console/Commands/JiminnyDebugCommand.php:49
Jiminny\Console\Commands\JiminnyDebugCommand::simulateMatchActivityStorm()
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.01ms DONE
cache [PASSWORD_DOTS] 38.00ms DONE
compiled [PASSWORD_DOTS] 1.78ms DONE
events [PASSWORD_DOTS] 1.13ms DONE
routes [PASSWORD_DOTS] 1.56ms DONE
views [PASSWORD_DOTS] 3.25ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-audio:worker-audio_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.34ms DONE
cache [PASSWORD_DOTS] 11.98ms DONE
compiled [PASSWORD_DOTS] 2.10ms DONE
events [PASSWORD_DOTS] 5.31ms DONE
routes [PASSWORD_DOTS] 2.90ms DONE
views [PASSWORD_DOTS] 13.11ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.53ms DONE
cache [PASSWORD_DOTS] 128.25ms DONE
compiled [PASSWORD_DOTS] 1.73ms DONE
events [PASSWORD_DOTS] 1.07ms DONE
routes [PASSWORD_DOTS] 1.45ms DONE
views [PASSWORD_DOTS] 5.46ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-emails:worker-emails_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 69.57ms DONE
cache [PASSWORD_DOTS] 285.32ms DONE
compiled [PASSWORD_DOTS] 13.02ms DONE
events [PASSWORD_DOTS] 11.48ms DONE
routes [PASSWORD_DOTS] 6.30ms DONE
views [PASSWORD_DOTS] 51.86ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-emails:worker-emails_00: stopped
worker-audio:worker-audio_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 59.22ms DONE
cache [PASSWORD_DOTS] 97.76ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 4.67ms DONE
routes [PASSWORD_DOTS] 11.57ms DONE
views [PASSWORD_DOTS] 18.54ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-emails:worker-emails_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-crm-sync:worke...
|
18357
|
NULL
|
NULL
|
NULL
|
|
18360
|
793
|
34
|
2026-05-11T11:13:01.587144+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497981587_m2.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PnostormIavicatecodeFV faVsco.js?9 JY-20725-handle PnostormIavicatecodeFV faVsco.js?9 JY-20725-handle-HS-search-rate-limiProletey(C) TranscodeParameterResclc) UserService.onp(C) Uuid.pnp> D Traitsm ucecaces> D User> D Utils› D Validation> OvOphp nelpers.ong© InitialFrontendState.php© Jiminny.phpc) Plan.oho© Serializer.phpC) TeamScimDetails.ohpbootstrap>© build.> contia>@ contrib→ database>M docsM front-end>D lang> node_modules library rootM ohostan> M nublic> D resourcesv Mroutesphp api.phpphp api_v2.phppnp console.onopnp customer_api.onppnp embedded.ongphp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage•aoo> M debuabar.… M frameworkv loasaitianore• audio wav= custom.loalT SyncCrmEntitiesTrait.phpC) CachedCrmServiceDecorator.ong© RateLimitException.php© PaginationConfia.phdclass Cllent extends Baseclient 1mpLements Hubspotclientintertace nubu1etunction 1shubspotrateuimithrowaole se: 000l11 $e instanceof \GuzzleHttp\Exception RequestExceptionreturn (int) $e->getCode === 429:recurn talsepubuac function parseRetrvAfterThrowable Se: 1nt'getResponseHeaders')) {Sheaders = $e->getResponseHeaders() ?: [];svalue = Sheadersl'Retry-After'J ?? Sheadersl'retry-after"J ?? null;if (is arnav(Svalue)) {= Svaluel0l 22 nullif Gs numeric(Svalue)) <return (int) $value;Smessage = strtolower(Se->getMessageO):if (str_contains(Smessage, 'daily')) {if (str_ contains(Smessaqe, 'ten secondly')) {recurn 10-if (str_contains(Smessaqe, 'secondly')) {return 1155|Sthis->loa->warnina('[Hubspotl No retry-after header or known message. using default'. [l'exception_class' => get_class($e),157= hubspot-journal-poll.log= laravel log< nhnunit ymus tht ispublic function parseMessage(Throwable $e): string= oauth-nrivate kevS0 hla• Preparation tor Kell... In 40m100% 5• Mon 11 May 14:13:01HandleHubsnotPatel imitTect- console [PRODI& console lEUllA console [STAGING]© UserAutomatedReportsController.php© PlaybackController.php(C) Hubspot/Service.pnp© HubSpot/Service.phpT DeleteCrmEntityTrait.php© VerifyActivityCrmTaskJob.php© RateLimitExceptionTest.php© Job.php© CrmActivityService.php© MatchCrmData.php© CrmObjectsResolver.php© ProviderRateLimiter.phpm A2 467 ×3л V= custom.logQ- 429= laravel.log X 4 SF (jiminny@localhost]4 HS_local [jiminny@localhost]X Cc W .*0 resultsuu 1 tutufo 4 spaces 0...
|
NULL
|
-6777052294096494189
|
NULL
|
click
|
ocr
|
NULL
|
PnostormIavicatecodeFV faVsco.js?9 JY-20725-handle PnostormIavicatecodeFV faVsco.js?9 JY-20725-handle-HS-search-rate-limiProletey(C) TranscodeParameterResclc) UserService.onp(C) Uuid.pnp> D Traitsm ucecaces> D User> D Utils› D Validation> OvOphp nelpers.ong© InitialFrontendState.php© Jiminny.phpc) Plan.oho© Serializer.phpC) TeamScimDetails.ohpbootstrap>© build.> contia>@ contrib→ database>M docsM front-end>D lang> node_modules library rootM ohostan> M nublic> D resourcesv Mroutesphp api.phpphp api_v2.phppnp console.onopnp customer_api.onppnp embedded.ongphp nealtn.onppnp scim.onophp uprotectedweb.phpphp web.phpphp webhook.php>O scriptsv O storage•aoo> M debuabar.… M frameworkv loasaitianore• audio wav= custom.loalT SyncCrmEntitiesTrait.phpC) CachedCrmServiceDecorator.ong© RateLimitException.php© PaginationConfia.phdclass Cllent extends Baseclient 1mpLements Hubspotclientintertace nubu1etunction 1shubspotrateuimithrowaole se: 000l11 $e instanceof \GuzzleHttp\Exception RequestExceptionreturn (int) $e->getCode === 429:recurn talsepubuac function parseRetrvAfterThrowable Se: 1nt'getResponseHeaders')) {Sheaders = $e->getResponseHeaders() ?: [];svalue = Sheadersl'Retry-After'J ?? Sheadersl'retry-after"J ?? null;if (is arnav(Svalue)) {= Svaluel0l 22 nullif Gs numeric(Svalue)) <return (int) $value;Smessage = strtolower(Se->getMessageO):if (str_contains(Smessage, 'daily')) {if (str_ contains(Smessaqe, 'ten secondly')) {recurn 10-if (str_contains(Smessaqe, 'secondly')) {return 1155|Sthis->loa->warnina('[Hubspotl No retry-after header or known message. using default'. [l'exception_class' => get_class($e),157= hubspot-journal-poll.log= laravel log< nhnunit ymus tht ispublic function parseMessage(Throwable $e): string= oauth-nrivate kevS0 hla• Preparation tor Kell... In 40m100% 5• Mon 11 May 14:13:01HandleHubsnotPatel imitTect- console [PRODI& console lEUllA console [STAGING]© UserAutomatedReportsController.php© PlaybackController.php(C) Hubspot/Service.pnp© HubSpot/Service.phpT DeleteCrmEntityTrait.php© VerifyActivityCrmTaskJob.php© RateLimitExceptionTest.php© Job.php© CrmActivityService.php© MatchCrmData.php© CrmObjectsResolver.php© ProviderRateLimiter.phpm A2 467 ×3л V= custom.logQ- 429= laravel.log X 4 SF (jiminny@localhost]4 HS_local [jiminny@localhost]X Cc W .*0 resultsuu 1 tutufo 4 spaces 0...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18359
|
792
|
37
|
2026-05-11T11:13:01.690778+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497981690_m1.jpg...
|
PhpStorm
|
faVsco.js – Client.php
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp§ Preparation for Refi... in 48 mDEV (docker)-zshDOCKERcompiledeventsroutesviews• ₴1DEV (docker)APP (-zsh)883Jiminny-worker-processing-2:j1minny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4: jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedJiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny: debug observeRateLimit toinspect cache state.root@docker_lamp_1:/home/jiminny# php artisanoptimize:clear && supervisorctl restart all-zsh*5100% C8• Mon 11 May 14:13:01T&1-zsh*7screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
NULL
|
7598608299684856364
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp§ Preparation for Refi... in 48 mDEV (docker)-zshDOCKERcompiledeventsroutesviews• ₴1DEV (docker)APP (-zsh)883Jiminny-worker-processing-2:j1minny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4: jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedJiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny: debug observeRateLimit toinspect cache state.root@docker_lamp_1:/home/jiminny# php artisanoptimize:clear && supervisorctl restart all-zsh*5100% C8• Mon 11 May 14:13:01T&1-zsh*7screenpipe"O ₴62.01ms DONE1.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
18356
|
NULL
|
NULL
|
NULL
|
|
18361
|
793
|
35
|
2026-05-11T11:13:05.115210+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497985115_m2.jpg...
|
iTerm2
|
DEV (docker)
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSW config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSWORD_DOTS] 21.31ms DONE
compiled [PASSWORD_DOTS] 3.11ms DONE
events [PASSWORD_DOTS] 5.05ms DONE
routes [PASSWORD_DOTS] 1.83ms DONE
views [PASSWORD_DOTS] 4.91ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 37.77ms DONE
cache [PASSWORD_DOTS] 58.83ms DONE
compiled [PASSWORD_DOTS] 9.93ms DONE
events [PASSWORD_DOTS] 12.23ms DONE
routes [PASSWORD_DOTS] 5.02ms DONE
views [PASSWORD_DOTS] 21.46ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.01ms DONE
cache [PASSWORD_DOTS] 16.11ms DONE
compiled [PASSWORD_DOTS] 2.91ms DONE
events [PASSWORD_DOTS] 2.27ms DONE
routes [PASSWORD_DOTS] 3.11ms DONE
views [PASSWORD_DOTS] 18.41ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
SevenShores\Hubspot\Exceptions\BadRequest
Client error: `POST [URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 55.84ms DONE
cache [PASSWORD_DOTS] 108.68ms DONE
compiled [PASSWORD_DOTS] 22.07ms DONE
events [PASSWORD_DOTS] 25.86ms DONE
routes [PASSWORD_DOTS] 19.91ms DONE
views [PASSWORD_DOTS] 52.25ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-audio:worker-audio_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
TypeError
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83
79▕
80▕ // Update reference parameters
81▕ $total = $state->total;
82▕ $lastRecordId = $state->lastRecordId;
➜ 83▕ }
84▕
85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool
86▕ {
87▕ if ($state->hasReachedSafetyLimit()) {
1 app/Services/Crm/Hubspot/Client.php:195
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\Services\Crm\Hubspot\Client), [], "contact")
2 app/Services/Crm/Hubspot/Client.php:176
Jiminny\Services\Crm\Hubspot\Client::getPaginatedDataGenerator([], "contact")
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.73ms DONE
cache [PASSWORD_DOTS] 19.13ms DONE
compiled [PASSWORD_DOTS] 4.93ms DONE
events [PASSWORD_DOTS] 3.02ms DONE
routes [PASSWORD_DOTS] 5.55ms DONE
views [PASSWORD_DOTS] 6.02ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 4.47ms DONE
cache [PASSWORD_DOTS] 16.66ms DONE
compiled [PASSWORD_DOTS] 3.26ms DONE
events [PASSWORD_DOTS] 3.99ms DONE
routes [PASSWORD_DOTS] 3.85ms DONE
views [PASSWORD_DOTS] 4.93ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.42ms DONE
cache [PASSWORD_DOTS] 23.70ms DONE
compiled [PASSWORD_DOTS] 3.46ms DONE
events [PASSWORD_DOTS] 4.30ms DONE
routes [PASSWORD_DOTS] 8.35ms DONE
views [PASSWORD_DOTS] 8.00ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.77ms DONE
cache [PASSWORD_DOTS] 25.55ms DONE
compiled [PASSWORD_DOTS] 3.87ms DONE
events [PASSWORD_DOTS] 4.96ms DONE
routes [PASSWORD_DOTS] 2.23ms DONE
views [PASSWORD_DOTS] 7.50ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
root@docker_lamp_1:/home/jiminny#
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status
On branch JY-20725-handle-HS-search-rate-limit
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: app/Jobs/Middleware/HandleHubspotRateLimit.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Exceptions/RateLimitException.php
modified: app/Jobs/Activity/Import/MatchCrmData.php
modified: app/Jobs/Crm/MatchActivityCrmData.php
modified: app/Services/Crm/Hubspot/Client.php
modified: app/Services/Crm/Hubspot/HubspotClientInterface.php
modified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php
modified: app/Services/Crm/Hubspot/Pagination/PaginationState.php
modified: app/Services/Crm/Hubspot/Service.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.local.bak
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr
* JY-20725-handle-HS-search-rate-limit
master
JY-20818-move-AJ-reports-to-separated-datadog-metric
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20157-AJ-report-not-send-notification
JY-20508-notify-before-AJ-report-expiration
JY-20372-ai-reports-promotion-pages
JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null
JY-20738-debug-AJ-tracking-UP
a
JY-18909-automated-reports-ask-jiminny
JY-20692-fix-integration-app-[API_KEY]
JY-20553-debug-crm-sync-delays
JY-20698-fix-SF-activity-types-on-new-playbook
JY-20543-AJ-report-tracking
JY-20384-handle-auto-sync-with-no-access-to-event-type
JY-20458-ask-jiminny-user-definitions
JY-19666-fix-import-contacts-account-association
JY-19666-HS-import-contacts-and-accounts-batch-job
JY-20458-Ask-Jiminny-Reports
JY-20200-batch-update-CRM-objects-Salesforce
JY-19666-HS-webhooks-add-contact-and-company
JY-20348-trigger-setup-DI-layout-on-team-creation
JY-20326-refactor-info-message-in-command
JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled
JY-20312-remove-on-update-change-last-synced-at-crm-configurations
JY-20306-SF-skip-auto-sync-for-task-based-playbook
JY-20192-remove-deleted-team-from-saved-search-filters
JY-20197-import-opportunity-batch-job
JY-20293-enable-status-field-for-pipedrive-deals
JY-20191-remove-commands-interactive-prompts
JY-20118-change-default-sync-strategy
JY-20183-add-cache-on-auto-log-delay
JY-20197-add-import-opportunity-batch-job
20118-hs-opportunity-make-webhook-strategy-default
JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based
JY-20196-handle-opportunity-without-note
JY-20118-improve-opportunity-import
JY-20189-handle-activity-search-on-deleted-groups
JY-20160
JY-20145-filter-out-converted-leads-when-matching
JY-20150-skip-push-summary-on-summary-ready-if-autolog
JY-20132-fix-note-encoding
JY-19792-clean-logs
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
+11 vendor frames
12 app/Console/Commands/JiminnyDebugCommand.php:380
Illuminate\Database\Eloquent\Builder::get()
13 app/Console/Commands/JiminnyDebugCommand.php:49
Jiminny\Console\Commands\JiminnyDebugCommand::simulateMatchActivityStorm()
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.01ms DONE
cache [PASSWORD_DOTS] 38.00ms DONE
compiled [PASSWORD_DOTS] 1.78ms DONE
events [PASSWORD_DOTS] 1.13ms DONE
routes [PASSWORD_DOTS] 1.56ms DONE
views [PASSWORD_DOTS] 3.25ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-audio:worker-audio_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.34ms DONE
cache [PASSWORD_DOTS] 11.98ms DONE
compiled [PASSWORD_DOTS] 2.10ms DONE
events [PASSWORD_DOTS] 5.31ms DONE
routes [PASSWORD_DOTS] 2.90ms DONE
views [PASSWORD_DOTS] 13.11ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.53ms DONE
cache [PASSWORD_DOTS] 128.25ms DONE
compiled [PASSWORD_DOTS] 1.73ms DONE
events [PASSWORD_DOTS] 1.07ms DONE
routes [PASSWORD_DOTS] 1.45ms DONE
views [PASSWORD_DOTS] 5.46ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-emails:worker-emails_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 69.57ms DONE
cache [PASSWORD_DOTS] 285.32ms DONE
compiled [PASSWORD_DOTS] 13.02ms DONE
events [PASSWORD_DOTS] 11.48ms DONE
routes [PASSWORD_DOTS] 6.30ms DONE
views [PASSWORD_DOTS] 51.86ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-emails:worker-emails_00: stopped
worker-audio:worker-audio_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 59.22ms DONE
cache [PASSWORD_DOTS] 97.76ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 4.67ms DONE
routes [PASSWORD_DOTS] 11.57ms DONE
views [PASSWORD_DOTS] 18.54ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-emails:worker-emails_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-crm-sync:worke...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"config .............................................................................................................................. 10.49ms DONE\n cache ............................................................................................................................... 21.31ms DONE\n compiled ............................................................................................................................. 3.11ms DONE\n events ............................................................................................................................... 5.05ms DONE\n routes ............................................................................................................................... 1.83ms DONE\n views ................................................................................................................................ 4.91ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 37.77ms DONE\n cache ............................................................................................................................... 58.83ms DONE\n compiled ............................................................................................................................. 9.93ms DONE\n events .............................................................................................................................. 12.23ms DONE\n routes ............................................................................................................................... 5.02ms DONE\n views ............................................................................................................................... 21.46ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.01ms DONE\n cache ............................................................................................................................... 16.11ms DONE\n compiled ............................................................................................................................. 2.91ms DONE\n events ............................................................................................................................... 2.27ms DONE\n routes ............................................................................................................................... 3.11ms DONE\n views ............................................................................................................................... 18.41ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n SevenShores\\Hubspot\\Exceptions\\BadRequest \n\n Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n\n at vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24\n 20▕ }\n 21▕ \n 22▕ public static function create(RequestException $guzzleException): self\n 23▕ {\n ➜ 24▕ $e = new static(\n 25▕ static::sanitizeResponseMessage($guzzleException->getMessage()),\n 26▕ $guzzleException->getCode(),\n 27▕ $guzzleException\n 28▕ );\n\n +13 vendor frames \n\n 14 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:163\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:51\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 55.84ms DONE\n cache .............................................................................................................................. 108.68ms DONE\n compiled ............................................................................................................................ 22.07ms DONE\n events .............................................................................................................................. 25.86ms DONE\n routes .............................................................................................................................. 19.91ms DONE\n views ............................................................................................................................... 52.25ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n TypeError \n\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83\n 79▕ \n 80▕ // Update reference parameters\n 81▕ $total = $state->total;\n 82▕ $lastRecordId = $state->lastRecordId;\n ➜ 83▕ }\n 84▕ \n 85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool\n 86▕ {\n 87▕ if ($state->hasReachedSafetyLimit()) {\n\n 1 app/Services/Crm/Hubspot/Client.php:195\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), [], \"contact\")\n\n 2 app/Services/Crm/Hubspot/Client.php:176\n Jiminny\\Services\\Crm\\Hubspot\\Client::getPaginatedDataGenerator([], \"contact\")\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.73ms DONE\n cache ............................................................................................................................... 19.13ms DONE\n compiled ............................................................................................................................. 4.93ms DONE\n events ............................................................................................................................... 3.02ms DONE\n routes ............................................................................................................................... 5.55ms DONE\n views ................................................................................................................................ 6.02ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.47ms DONE\n cache ............................................................................................................................... 16.66ms DONE\n compiled ............................................................................................................................. 3.26ms DONE\n events ............................................................................................................................... 3.99ms DONE\n routes ............................................................................................................................... 3.85ms DONE\n views ................................................................................................................................ 4.93ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.42ms DONE\n cache ............................................................................................................................... 23.70ms DONE\n compiled ............................................................................................................................. 3.46ms DONE\n events ............................................................................................................................... 4.30ms DONE\n routes ............................................................................................................................... 8.35ms DONE\n views ................................................................................................................................ 8.00ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.77ms DONE\n cache ............................................................................................................................... 25.55ms DONE\n compiled ............................................................................................................................. 3.87ms DONE\n events ............................................................................................................................... 4.96ms DONE\n routes ............................................................................................................................... 2.23ms DONE\n views ................................................................................................................................ 7.50ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ dev\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status\nOn branch JY-20725-handle-HS-search-rate-limit\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: app/Jobs/Middleware/HandleHubspotRateLimit.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Exceptions/RateLimitException.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Activity/Import/MatchCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Crm/MatchActivityCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Client.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/HubspotClientInterface.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/PaginationState.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.local.bak\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr\n* JY-20725-handle-HS-search-rate-limit\n master\n JY-20818-move-AJ-reports-to-separated-datadog-metric\n JY-20773-fix-automated-reports-user-pilot-tracking\n JY-20157-AJ-report-not-send-notification\n JY-20508-notify-before-AJ-report-expiration\n JY-20372-ai-reports-promotion-pages\n JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null\n JY-20738-debug-AJ-tracking-UP\n a\n JY-18909-automated-reports-ask-jiminny\n JY-20692-fix-integration-app-token-auth-response-change\n JY-20553-debug-crm-sync-delays\n JY-20698-fix-SF-activity-types-on-new-playbook\n JY-20543-AJ-report-tracking\n JY-20384-handle-auto-sync-with-no-access-to-event-type\n JY-20458-ask-jiminny-user-definitions\n JY-19666-fix-import-contacts-account-association\n JY-19666-HS-import-contacts-and-accounts-batch-job\n JY-20458-Ask-Jiminny-Reports\n JY-20200-batch-update-CRM-objects-Salesforce\n JY-19666-HS-webhooks-add-contact-and-company\n JY-20348-trigger-setup-DI-layout-on-team-creation\n JY-20326-refactor-info-message-in-command\n JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled\n JY-20312-remove-on-update-change-last-synced-at-crm-configurations\n JY-20306-SF-skip-auto-sync-for-task-based-playbook\n JY-20192-remove-deleted-team-from-saved-search-filters\n JY-20197-import-opportunity-batch-job\n JY-20293-enable-status-field-for-pipedrive-deals\n JY-20191-remove-commands-interactive-prompts\n JY-20118-change-default-sync-strategy\n JY-20183-add-cache-on-auto-log-delay\n JY-20197-add-import-opportunity-batch-job\n 20118-hs-opportunity-make-webhook-strategy-default\n JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based\n JY-20196-handle-opportunity-without-note\n JY-20118-improve-opportunity-import\n JY-20189-handle-activity-search-on-deleted-groups\n JY-20160\n JY-20145-filter-out-converted-leads-when-matching\n JY-20150-skip-push-summary-on-summary-ready-if-autolog\n JY-20132-fix-note-encoding\n JY-19792-clean-logs\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\n\n Illuminate\\Database\\QueryException \n\n SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)\n\n at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838\n 834▕ $exceptionType = $this->isUniqueConstraintError($e)\n 835▕ ? UniqueConstraintViolationException::class\n 836▕ : QueryException::class;\n 837▕ \n ➜ 838▕ throw new $exceptionType(\n 839▕ $this->getNameWithReadWriteType(),\n 840▕ $query,\n 841▕ $this->prepareBindings($bindings),\n 842▕ $e,\n\n +11 vendor frames \n\n 12 app/Console/Commands/JiminnyDebugCommand.php:380\n Illuminate\\Database\\Eloquent\\Builder::get()\n\n 13 app/Console/Commands/JiminnyDebugCommand.php:49\n Jiminny\\Console\\Commands\\JiminnyDebugCommand::simulateMatchActivityStorm()\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.01ms DONE\n cache ............................................................................................................................... 38.00ms DONE\n compiled ............................................................................................................................. 1.78ms DONE\n events ............................................................................................................................... 1.13ms DONE\n routes ............................................................................................................................... 1.56ms DONE\n views ................................................................................................................................ 3.25ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.34ms DONE\n cache ............................................................................................................................... 11.98ms DONE\n compiled ............................................................................................................................. 2.10ms DONE\n events ............................................................................................................................... 5.31ms DONE\n routes ............................................................................................................................... 2.90ms DONE\n views ............................................................................................................................... 13.11ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.53ms DONE\n cache .............................................................................................................................. 128.25ms DONE\n compiled ............................................................................................................................. 1.73ms DONE\n events ............................................................................................................................... 1.07ms DONE\n routes ............................................................................................................................... 1.45ms DONE\n views ................................................................................................................................ 5.46ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 69.57ms DONE\n cache .............................................................................................................................. 285.32ms DONE\n compiled ............................................................................................................................ 13.02ms DONE\n events .............................................................................................................................. 11.48ms DONE\n routes ............................................................................................................................... 6.30ms DONE\n views ............................................................................................................................... 51.86ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-audio:worker-audio_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 59.22ms DONE\n cache ............................................................................................................................... 97.76ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 4.67ms DONE\n routes .............................................................................................................................. 11.57ms DONE\n views ............................................................................................................................... 18.54ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 5.16ms DONE\n cache ............................................................................................................................... 27.20ms DONE\n compiled ............................................................................................................................. 2.01ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.13ms DONE\n views ............................................................................................................................... 15.28ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all","depth":4,"on_screen":true,"value":"config .............................................................................................................................. 10.49ms DONE\n cache ............................................................................................................................... 21.31ms DONE\n compiled ............................................................................................................................. 3.11ms DONE\n events ............................................................................................................................... 5.05ms DONE\n routes ............................................................................................................................... 1.83ms DONE\n views ................................................................................................................................ 4.91ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 37.77ms DONE\n cache ............................................................................................................................... 58.83ms DONE\n compiled ............................................................................................................................. 9.93ms DONE\n events .............................................................................................................................. 12.23ms DONE\n routes ............................................................................................................................... 5.02ms DONE\n views ............................................................................................................................... 21.46ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker:worker_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.01ms DONE\n cache ............................................................................................................................... 16.11ms DONE\n compiled ............................................................................................................................. 2.91ms DONE\n events ............................................................................................................................... 2.27ms DONE\n routes ............................................................................................................................... 3.11ms DONE\n views ............................................................................................................................... 18.41ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n SevenShores\\Hubspot\\Exceptions\\BadRequest \n\n Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response:\n{\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT\",\"correlationId\":\"019e0284-5 (truncated...)\n\n at vendor/hubspot/hubspot-php/src/Exceptions/HubspotException.php:24\n 20▕ }\n 21▕ \n 22▕ public static function create(RequestException $guzzleException): self\n 23▕ {\n ➜ 24▕ $e = new static(\n 25▕ static::sanitizeResponseMessage($guzzleException->getMessage()),\n 26▕ $guzzleException->getCode(),\n 27▕ $guzzleException\n 28▕ );\n\n +13 vendor frames \n\n 14 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:163\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:51\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 55.84ms DONE\n cache .............................................................................................................................. 108.68ms DONE\n compiled ............................................................................................................................ 22.07ms DONE\n events .............................................................................................................................. 25.86ms DONE\n routes .............................................................................................................................. 19.91ms DONE\n views ............................................................................................................................... 52.25ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n TypeError \n\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83\n 79▕ \n 80▕ // Update reference parameters\n 81▕ $total = $state->total;\n 82▕ $lastRecordId = $state->lastRecordId;\n ➜ 83▕ }\n 84▕ \n 85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool\n 86▕ {\n 87▕ if ($state->hasReachedSafetyLimit()) {\n\n 1 app/Services/Crm/Hubspot/Client.php:195\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), [], \"contact\")\n\n 2 app/Services/Crm/Hubspot/Client.php:176\n Jiminny\\Services\\Crm\\Hubspot\\Client::getPaginatedDataGenerator([], \"contact\")\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.73ms DONE\n cache ............................................................................................................................... 19.13ms DONE\n compiled ............................................................................................................................. 4.93ms DONE\n events ............................................................................................................................... 3.02ms DONE\n routes ............................................................................................................................... 5.55ms DONE\n views ................................................................................................................................ 6.02ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 4.47ms DONE\n cache ............................................................................................................................... 16.66ms DONE\n compiled ............................................................................................................................. 3.26ms DONE\n events ............................................................................................................................... 3.99ms DONE\n routes ............................................................................................................................... 3.85ms DONE\n views ................................................................................................................................ 4.93ms DONE\n\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 14.42ms DONE\n cache ............................................................................................................................... 23.70ms DONE\n compiled ............................................................................................................................. 3.46ms DONE\n events ............................................................................................................................... 4.30ms DONE\n routes ............................................................................................................................... 8.35ms DONE\n views ................................................................................................................................ 8.00ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nMatching contact 3\nMatching contact 4\nMatching contact 5\nMatching contact 6\nMatching contact 7\nMatching contact 8\nMatching contact 9\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\n\n Jiminny\\Exceptions\\RateLimitException \n\n Hubspot returned 429\n\n at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206\n 202▕ 'retry_after' => $retryAfter,\n 203▕ 'reason' => $e->getMessage(),\n 204▕ ]);\n 205▕ \n ➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);\n 207▕ } else {\n 208▕ throw $e;\n 209▕ }\n 210▕ }\n\n +14 vendor frames \n\n 15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166\n SevenShores\\Hubspot\\Http\\Client::request(\"POST\", \"https://api.hubapi.com/crm/v3/objects/contact/search\", [])\n\n 16 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:52\n Jiminny\\Services\\Crm\\Hubspot\\Pagination\\HubspotPaginationService::executeSearchRequest(Object(Jiminny\\Services\\Crm\\Hubspot\\Client), \"https://api.hubapi.com/crm/v3/objects/contact/search\", [], Object(Jiminny\\Services\\Crm\\Hubspot\\Pagination\\PaginationState))\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.77ms DONE\n cache ............................................................................................................................... 25.55ms DONE\n compiled ............................................................................................................................. 3.87ms DONE\n events ............................................................................................................................... 4.96ms DONE\n routes ............................................................................................................................... 2.23ms DONE\n views ................................................................................................................................ 7.50ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nMatching contact 0\nMatching contact 1\nMatching contact 2\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ dev\nroot@docker_lamp_1:/home/jiminny# \nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status\nOn branch JY-20725-handle-HS-search-rate-limit\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: app/Jobs/Middleware/HandleHubspotRateLimit.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Exceptions/RateLimitException.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Activity/Import/MatchCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Crm/MatchActivityCrmData.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Client.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/HubspotClientInterface.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Pagination/PaginationState.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/Crm/Hubspot/Service.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.local.bak\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr\n* JY-20725-handle-HS-search-rate-limit\n master\n JY-20818-move-AJ-reports-to-separated-datadog-metric\n JY-20773-fix-automated-reports-user-pilot-tracking\n JY-20157-AJ-report-not-send-notification\n JY-20508-notify-before-AJ-report-expiration\n JY-20372-ai-reports-promotion-pages\n JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null\n JY-20738-debug-AJ-tracking-UP\n a\n JY-18909-automated-reports-ask-jiminny\n JY-20692-fix-integration-app-token-auth-response-change\n JY-20553-debug-crm-sync-delays\n JY-20698-fix-SF-activity-types-on-new-playbook\n JY-20543-AJ-report-tracking\n JY-20384-handle-auto-sync-with-no-access-to-event-type\n JY-20458-ask-jiminny-user-definitions\n JY-19666-fix-import-contacts-account-association\n JY-19666-HS-import-contacts-and-accounts-batch-job\n JY-20458-Ask-Jiminny-Reports\n JY-20200-batch-update-CRM-objects-Salesforce\n JY-19666-HS-webhooks-add-contact-and-company\n JY-20348-trigger-setup-DI-layout-on-team-creation\n JY-20326-refactor-info-message-in-command\n JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled\n JY-20312-remove-on-update-change-last-synced-at-crm-configurations\n JY-20306-SF-skip-auto-sync-for-task-based-playbook\n JY-20192-remove-deleted-team-from-saved-search-filters\n JY-20197-import-opportunity-batch-job\n JY-20293-enable-status-field-for-pipedrive-deals\n JY-20191-remove-commands-interactive-prompts\n JY-20118-change-default-sync-strategy\n JY-20183-add-cache-on-auto-log-delay\n JY-20197-add-import-opportunity-batch-job\n 20118-hs-opportunity-make-webhook-strategy-default\n JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based\n JY-20196-handle-opportunity-without-note\n JY-20118-improve-opportunity-import\n JY-20189-handle-activity-search-on-deleted-groups\n JY-20160\n JY-20145-filter-out-converted-leads-when-matching\n JY-20150-skip-push-summary-on-summary-ready-if-autolog\n JY-20132-fix-note-encoding\n JY-19792-clean-logs\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\n\n Illuminate\\Database\\QueryException \n\n SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)\n\n at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838\n 834▕ $exceptionType = $this->isUniqueConstraintError($e)\n 835▕ ? UniqueConstraintViolationException::class\n 836▕ : QueryException::class;\n 837▕ \n ➜ 838▕ throw new $exceptionType(\n 839▕ $this->getNameWithReadWriteType(),\n 840▕ $query,\n 841▕ $this->prepareBindings($bindings),\n 842▕ $e,\n\n +11 vendor frames \n\n 12 app/Console/Commands/JiminnyDebugCommand.php:380\n Illuminate\\Database\\Eloquent\\Builder::get()\n\n 13 app/Console/Commands/JiminnyDebugCommand.php:49\n Jiminny\\Console\\Commands\\JiminnyDebugCommand::simulateMatchActivityStorm()\n\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.01ms DONE\n cache ............................................................................................................................... 38.00ms DONE\n compiled ............................................................................................................................. 1.78ms DONE\n events ............................................................................................................................... 1.13ms DONE\n routes ............................................................................................................................... 1.56ms DONE\n views ................................................................................................................................ 3.25ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 6.34ms DONE\n cache ............................................................................................................................... 11.98ms DONE\n compiled ............................................................................................................................. 2.10ms DONE\n events ............................................................................................................................... 5.31ms DONE\n routes ............................................................................................................................... 2.90ms DONE\n views ............................................................................................................................... 13.11ms DONE\n\nworker-crm-update:worker-crm-update_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 10.53ms DONE\n cache .............................................................................................................................. 128.25ms DONE\n compiled ............................................................................................................................. 1.73ms DONE\n events ............................................................................................................................... 1.07ms DONE\n routes ............................................................................................................................... 1.45ms DONE\n views ................................................................................................................................ 5.46ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nworker-es-update:worker-es-update_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 69.57ms DONE\n cache .............................................................................................................................. 285.32ms DONE\n compiled ............................................................................................................................ 13.02ms DONE\n events .............................................................................................................................. 11.48ms DONE\n routes ............................................................................................................................... 6.30ms DONE\n views ............................................................................................................................... 51.86ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-audio:worker-audio_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config .............................................................................................................................. 59.22ms DONE\n cache ............................................................................................................................... 97.76ms DONE\n compiled ............................................................................................................................. 2.63ms DONE\n events ............................................................................................................................... 4.67ms DONE\n routes .............................................................................................................................. 11.57ms DONE\n views ............................................................................................................................... 18.54ms DONE\n\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all\n\n INFO Clearing cached bootstrap files. \n\n config ............................................................................................................................... 5.16ms DONE\n cache ............................................................................................................................... 27.20ms DONE\n compiled ............................................................................................................................. 2.01ms DONE\n events ............................................................................................................................... 1.32ms DONE\n routes ............................................................................................................................... 1.13ms DONE\n views ............................................................................................................................... 15.28ms DONE\n\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-analytics:worker-analytics_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-download:worker-download_00: stopped\nworker-nudges:worker-nudges_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\nroot@docker_lamp_1:/home/jiminny# php artisan jiminny:debug\nDispatching 100 MatchActivityCrmData jobs (portal=2)\nDone. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.\nroot@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.33759972,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33959442,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.40492022,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4069149,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.4722407,"top":1.0,"width":0.06732048,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4742354,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.53956115,"top":1.0,"width":0.06715426,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5415558,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.60671544,"top":1.0,"width":0.06715426,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6087101,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.67386967,"top":1.0,"width":0.06715426,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.67586434,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"DEV (docker)","depth":1,"bounds":{"left":0.49468085,"top":1.0,"width":0.029920213,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
8358287232746116441
|
4435031406530046724
|
visual_change
|
accessibility
|
NULL
|
config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSW config [PASSWORD_DOTS] 10.49ms DONE
cache [PASSWORD_DOTS] 21.31ms DONE
compiled [PASSWORD_DOTS] 3.11ms DONE
events [PASSWORD_DOTS] 5.05ms DONE
routes [PASSWORD_DOTS] 1.83ms DONE
views [PASSWORD_DOTS] 4.91ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 37.77ms DONE
cache [PASSWORD_DOTS] 58.83ms DONE
compiled [PASSWORD_DOTS] 9.93ms DONE
events [PASSWORD_DOTS] 12.23ms DONE
routes [PASSWORD_DOTS] 5.02ms DONE
views [PASSWORD_DOTS] 21.46ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker:worker_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.01ms DONE
cache [PASSWORD_DOTS] 16.11ms DONE
compiled [PASSWORD_DOTS] 2.91ms DONE
events [PASSWORD_DOTS] 2.27ms DONE
routes [PASSWORD_DOTS] 3.11ms DONE
views [PASSWORD_DOTS] 18.41ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
SevenShores\Hubspot\Exceptions\BadRequest
Client error: `POST [URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 55.84ms DONE
cache [PASSWORD_DOTS] 108.68ms DONE
compiled [PASSWORD_DOTS] 22.07ms DONE
events [PASSWORD_DOTS] 25.86ms DONE
routes [PASSWORD_DOTS] 19.91ms DONE
views [PASSWORD_DOTS] 52.25ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-audio:worker-audio_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
TypeError
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(): Return value must be of type Generator, none returned
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:83
79▕
80▕ // Update reference parameters
81▕ $total = $state->total;
82▕ $lastRecordId = $state->lastRecordId;
➜ 83▕ }
84▕
85▕ private function shouldStopPagination(PaginationState $state, int $teamId): bool
86▕ {
87▕ if ($state->hasReachedSafetyLimit()) {
1 app/Services/Crm/Hubspot/Client.php:195
Jiminny\Services\Crm\Hubspot\Pagination\HubspotPaginationService::getPaginatedDataGenerator(Object(Jiminny\Services\Crm\Hubspot\Client), [], "contact")
2 app/Services/Crm/Hubspot/Client.php:176
Jiminny\Services\Crm\Hubspot\Client::getPaginatedDataGenerator([], "contact")
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.73ms DONE
cache [PASSWORD_DOTS] 19.13ms DONE
compiled [PASSWORD_DOTS] 4.93ms DONE
events [PASSWORD_DOTS] 3.02ms DONE
routes [PASSWORD_DOTS] 5.55ms DONE
views [PASSWORD_DOTS] 6.02ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 4.47ms DONE
cache [PASSWORD_DOTS] 16.66ms DONE
compiled [PASSWORD_DOTS] 3.26ms DONE
events [PASSWORD_DOTS] 3.99ms DONE
routes [PASSWORD_DOTS] 3.85ms DONE
views [PASSWORD_DOTS] 4.93ms DONE
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 14.42ms DONE
cache [PASSWORD_DOTS] 23.70ms DONE
compiled [PASSWORD_DOTS] 3.46ms DONE
events [PASSWORD_DOTS] 4.30ms DONE
routes [PASSWORD_DOTS] 8.35ms DONE
views [PASSWORD_DOTS] 8.00ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
Matching contact 3
Matching contact 4
Matching contact 5
Matching contact 6
Matching contact 7
Matching contact 8
Matching contact 9
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Jiminny\Exceptions\RateLimitException
Hubspot returned 429
at app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:206
202▕ 'retry_after' => $retryAfter,
203▕ 'reason' => $e->getMessage(),
204▕ ]);
205▕
➜ 206▕ throw new RateLimitException('Hubspot returned 429', $retryAfter, $e);
207▕ } else {
208▕ throw $e;
209▕ }
210▕ }
+14 vendor frames
15 app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php:166
SevenShores\Hubspot\Http\Client::request("POST", "[URL_WITH_CREDENTIALS] php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.77ms DONE
cache [PASSWORD_DOTS] 25.55ms DONE
compiled [PASSWORD_DOTS] 3.87ms DONE
events [PASSWORD_DOTS] 4.96ms DONE
routes [PASSWORD_DOTS] 2.23ms DONE
views [PASSWORD_DOTS] 7.50ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Matching contact 0
Matching contact 1
Matching contact 2
root@docker_lamp_1:/home/jiminny#
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug 007d5da3af66
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ git status
On branch JY-20725-handle-HS-search-rate-limit
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: app/Jobs/Middleware/HandleHubspotRateLimit.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Exceptions/RateLimitException.php
modified: app/Jobs/Activity/Import/MatchCrmData.php
modified: app/Jobs/Crm/MatchActivityCrmData.php
modified: app/Services/Crm/Hubspot/Client.php
modified: app/Services/Crm/Hubspot/HubspotClientInterface.php
modified: app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php
modified: app/Services/Crm/Hubspot/Pagination/PaginationState.php
modified: app/Services/Crm/Hubspot/Service.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.local.bak
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ gbr
* JY-20725-handle-HS-search-rate-limit
master
JY-20818-move-AJ-reports-to-separated-datadog-metric
JY-20773-fix-automated-reports-user-pilot-tracking
JY-20157-AJ-report-not-send-notification
JY-20508-notify-before-AJ-report-expiration
JY-20372-ai-reports-promotion-pages
JY-20352-sync-opportunities-without-a-local-owner-user-id-is-null
JY-20738-debug-AJ-tracking-UP
a
JY-18909-automated-reports-ask-jiminny
JY-20692-fix-integration-app-[API_KEY]
JY-20553-debug-crm-sync-delays
JY-20698-fix-SF-activity-types-on-new-playbook
JY-20543-AJ-report-tracking
JY-20384-handle-auto-sync-with-no-access-to-event-type
JY-20458-ask-jiminny-user-definitions
JY-19666-fix-import-contacts-account-association
JY-19666-HS-import-contacts-and-accounts-batch-job
JY-20458-Ask-Jiminny-Reports
JY-20200-batch-update-CRM-objects-Salesforce
JY-19666-HS-webhooks-add-contact-and-company
JY-20348-trigger-setup-DI-layout-on-team-creation
JY-20326-refactor-info-message-in-command
JY-20317-fix-auto-log-delay-issue-on-all-channels-disabled
JY-20312-remove-on-update-change-last-synced-at-crm-configurations
JY-20306-SF-skip-auto-sync-for-task-based-playbook
JY-20192-remove-deleted-team-from-saved-search-filters
JY-20197-import-opportunity-batch-job
JY-20293-enable-status-field-for-pipedrive-deals
JY-20191-remove-commands-interactive-prompts
JY-20118-change-default-sync-strategy
JY-20183-add-cache-on-auto-log-delay
JY-20197-add-import-opportunity-batch-job
20118-hs-opportunity-make-webhook-strategy-default
JY-20118-make-default-hs-opportunity-sync-strategy-webhook-based
JY-20196-handle-opportunity-without-note
JY-20118-improve-opportunity-import
JY-20189-handle-activity-search-on-deleted-groups
JY-20160
JY-20145-filter-out-converted-leads-when-matching
JY-20150-skip-push-summary-on-summary-ready-if-autolog
JY-20132-fix-note-encoding
JY-19792-clean-logs
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-limit) $ dev
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'team_id' in 'WHERE' (Connection: mysql, Host: mariadb, Port: 3306, Database: jiminny, SQL: select * from `activities` where `team_id` = 2 and `activities`.`deleted_at` is null order by `id` desc limit 100)
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:838
834▕ $exceptionType = $this->isUniqueConstraintError($e)
835▕ ? UniqueConstraintViolationException::class
836▕ : QueryException::class;
837▕
➜ 838▕ throw new $exceptionType(
839▕ $this->getNameWithReadWriteType(),
840▕ $query,
841▕ $this->prepareBindings($bindings),
842▕ $e,
+11 vendor frames
12 app/Console/Commands/JiminnyDebugCommand.php:380
Illuminate\Database\Eloquent\Builder::get()
13 app/Console/Commands/JiminnyDebugCommand.php:49
Jiminny\Console\Commands\JiminnyDebugCommand::simulateMatchActivityStorm()
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.01ms DONE
cache [PASSWORD_DOTS] 38.00ms DONE
compiled [PASSWORD_DOTS] 1.78ms DONE
events [PASSWORD_DOTS] 1.13ms DONE
routes [PASSWORD_DOTS] 1.56ms DONE
views [PASSWORD_DOTS] 3.25ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-audio:worker-audio_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 6.34ms DONE
cache [PASSWORD_DOTS] 11.98ms DONE
compiled [PASSWORD_DOTS] 2.10ms DONE
events [PASSWORD_DOTS] 5.31ms DONE
routes [PASSWORD_DOTS] 2.90ms DONE
views [PASSWORD_DOTS] 13.11ms DONE
worker-crm-update:worker-crm-update_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-emails:worker-emails_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 10.53ms DONE
cache [PASSWORD_DOTS] 128.25ms DONE
compiled [PASSWORD_DOTS] 1.73ms DONE
events [PASSWORD_DOTS] 1.07ms DONE
routes [PASSWORD_DOTS] 1.45ms DONE
views [PASSWORD_DOTS] 5.46ms DONE
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-emails:worker-emails_00: stopped
worker-nudges:worker-nudges_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
artisan-schedule:artisan-schedule_00: stopped
worker-es-update:worker-es-update_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 69.57ms DONE
cache [PASSWORD_DOTS] 285.32ms DONE
compiled [PASSWORD_DOTS] 13.02ms DONE
events [PASSWORD_DOTS] 11.48ms DONE
routes [PASSWORD_DOTS] 6.30ms DONE
views [PASSWORD_DOTS] 51.86ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker:worker_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
worker-crm-sync:worker-crm-sync_00: stopped
worker-es-update:worker-es-update_00: stopped
worker-emails:worker-emails_00: stopped
worker-audio:worker-audio_00: stopped
artisan-schedule:artisan-schedule_00: stopped
artisan-schedule:artisan-schedule_00: started
jiminny-worker-processing-1:jiminny-worker-processing-1_00: started
jiminny-worker-processing-2:jiminny-worker-processing-2_00: started
jiminny-worker-processing-3:jiminny-worker-processing-3_00: started
jiminny-worker-processing-4:jiminny-worker-processing-4_00: started
jiminny-worker-processing-5:jiminny-worker-processing-5_00: started
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started
worker:worker_00: started
worker-analytics:worker-analytics_00: started
worker-audio:worker-audio_00: started
worker-calendar:worker-calendar_00: started
worker-conferences:worker-conferences_00: started
worker-crm-sync:worker-crm-sync_00: started
worker-crm-update:worker-crm-update_00: started
worker-download:worker-download_00: started
worker-emails:worker-emails_00: started
worker-es-update:worker-es-update_00: started
worker-nudges:worker-nudges_00: started
root@docker_lamp_1:/home/jiminny# php artisan jiminny:debug
Dispatching 100 MatchActivityCrmData jobs (portal=2)
Done. Watch logs and run jiminny:debug observeRateLimit to inspect cache state.
root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all
INFO Clearing cached bootstrap files.
config [PASSWORD_DOTS] 59.22ms DONE
cache [PASSWORD_DOTS] 97.76ms DONE
compiled [PASSWORD_DOTS] 2.63ms DONE
events [PASSWORD_DOTS] 4.67ms DONE
routes [PASSWORD_DOTS] 11.57ms DONE
views [PASSWORD_DOTS] 18.54ms DONE
jiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped
jiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped
jiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped
jiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped
jiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped
worker-analytics:worker-analytics_00: stopped
worker-crm-update:worker-crm-update_00: stopped
worker-download:worker-download_00: stopped
worker-nudges:worker-nudges_00: stopped
worker-emails:worker-emails_00: stopped
worker:worker_00: stopped
worker-audio:worker-audio_00: stopped
worker-calendar:worker-calendar_00: stopped
worker-conferences:worker-conferences_00: stopped
jiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped
worker-crm-sync:worke...
|
18360
|
NULL
|
NULL
|
NULL
|
|
18362
|
792
|
38
|
2026-05-11T11:13:07.008518+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497987008_m1.jpg...
|
Notion Calendar
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ab)§ Preparation for Refi... in 47 m100% <8• Mon 11 May 14:13:061881DEV (docker)-zshDOCKER•₴1DEV (docker)$2APP (-zsh)H3eventsroutesviewsjiminny-worker-processing-2: jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5: jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny: debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and run jiminny:debug observeRateLimit toinspect cache state.root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all84-zshX5screenpipe"O ₴61.32ms DONE1.13ms DONE15.28ms DONE-zshDEV...
|
NULL
|
7822795100043184726
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ab)§ Preparation for Refi... in 47 m100% <8• Mon 11 May 14:13:061881DEV (docker)-zshDOCKER•₴1DEV (docker)$2APP (-zsh)H3eventsroutesviewsjiminny-worker-processing-2: jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5: jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny: debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and run jiminny:debug observeRateLimit toinspect cache state.root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all84-zshX5screenpipe"O ₴61.32ms DONE1.13ms DONE15.28ms DONE-zshDEV...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18363
|
793
|
36
|
2026-05-11T11:13:08.190230+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497988190_m2.jpg...
|
Notion Calendar
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PostmanroledeyVIewWindowmelp© BatchSyncCollectolT PostmanroledeyVIewWindowmelp© BatchSyncCollectolT SyncCrmEntitiesTrait.phpwawalotnttevileebeeale balchsynckealssec clientone© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service,onoC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Acceccors> D ConfigD DTO• M SiltersD Jobs. M ProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph(c) LocalSearch.php• LocalSearchInterfa© RemoteSearch.phpc) Service.phpv D Listeners© ConvertLeadActivitc) PurceLookuocache> M Metadata> Miarationi> M Pipedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpclass Cllent extends Baseclient 1mplen nubu1etunction 1shubspotratelim1t11 $e instanceof \GuzzleHtreturn (int) $e->getCodeOrecurn talsepubuac function parseRetrvAftercTh1f method exists(Se.Sheadens = se->detResponsesvalue = Sheadens|Retry-if (is arnav(Svalue)) {Svalue = Svalueiol 2:if (is_numeric($value)) 1return Gint) Svalue:Smessage = strtolower(Se->getMif (str_contains(Smessage, 'daif (str_ contains(Smessage.if (str_ contains(Smessage.return 1Sthis->lo0->warningl' Hubsootpublic function parseMessage(Throv• SearchYour team is now on the Free plan with 1 admin. You retain editing access and other members are read-only. View team permissions to see who can edit, or upgrade to restore collaborationPOST search dealsPOST Read a batch of obiecPost Read a batch of assorteration run Search HS (#0))v COLLECtIONSs9: An error occurreaCRM Owners• CRM Pipelines› Dealsengagements>D OLD ENGAGEMENTSGet list meetingsPOST search modified companiesrosl search tasksGET read callGeT list callsrost meeuings scheculedGET det meetinorost det link to task>POST Create Contact with AssociationHuospotv teration run HSGET Read copyeg. An error occurred.ss. successful operationv teration run Search HSPOSt search contact by emall eopy> Journal & webhoooks v4› OAuth› Properties• DECCADOLSEARCHpost coarch cantant hu nhanoPOST search contact by emailPOST search meetingsPOST search notesPost Search callc vaPOST Search related meetinas v3POST search deals› © Critical System Resource Limitu Iteration run Search HS • 20 VUs • May 11, 2026 14:08:52 (1 min) • Fixed profileSummaryTotal requests sent ©Requests/second ©Avg. response time ©6.470107A07156 ms% 10014•08•5614:09:02Dorformonso dotolle fortotol durotinnPOST search contact by email Copysbeen stopped to prevent systenSustem Resource WarningSustem resources are constrained. Thesystem mav not be able to generate the loadeded for this test and the cest is likely toe Connect Git = Concole 5.l Termina14•09•146.470GET ReadP90 ©174 ms105.99GET Read CopyP95 ©202 msP99 ©371ms0 Iteration run Search HSError % ©0,00Failure % ©0.00Preparation for Refi... in 47 m100% C4• Mon 11 May 14:13:07D Iteration run Search HSPeak CPU % ©Peak Memory % ©100.0 %18.9 %Filter bv requestsvAva. response591 ms 140 req/s2960.0014•09•26Failure %0.0014.09-2214•09•2814.09-4414•09•50- Requests/second - Ava. response - Error % — Virtual users ..• CPU % •.• Memory %Resp. time (Ava. ms)Min (ms)Max ms)947202371Globals Vault Tools?000...
|
NULL
|
-3127406200932502847
|
NULL
|
visual_change
|
ocr
|
NULL
|
PostmanroledeyVIewWindowmelp© BatchSyncCollectolT PostmanroledeyVIewWindowmelp© BatchSyncCollectolT SyncCrmEntitiesTrait.phpwawalotnttevileebeeale balchsynckealssec clientone© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service,onoC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Acceccors> D ConfigD DTO• M SiltersD Jobs. M ProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph(c) LocalSearch.php• LocalSearchInterfa© RemoteSearch.phpc) Service.phpv D Listeners© ConvertLeadActivitc) PurceLookuocache> M Metadata> Miarationi> M Pipedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpclass Cllent extends Baseclient 1mplen nubu1etunction 1shubspotratelim1t11 $e instanceof \GuzzleHtreturn (int) $e->getCodeOrecurn talsepubuac function parseRetrvAftercTh1f method exists(Se.Sheadens = se->detResponsesvalue = Sheadens|Retry-if (is arnav(Svalue)) {Svalue = Svalueiol 2:if (is_numeric($value)) 1return Gint) Svalue:Smessage = strtolower(Se->getMif (str_contains(Smessage, 'daif (str_ contains(Smessage.if (str_ contains(Smessage.return 1Sthis->lo0->warningl' Hubsootpublic function parseMessage(Throv• SearchYour team is now on the Free plan with 1 admin. You retain editing access and other members are read-only. View team permissions to see who can edit, or upgrade to restore collaborationPOST search dealsPOST Read a batch of obiecPost Read a batch of assorteration run Search HS (#0))v COLLECtIONSs9: An error occurreaCRM Owners• CRM Pipelines› Dealsengagements>D OLD ENGAGEMENTSGet list meetingsPOST search modified companiesrosl search tasksGET read callGeT list callsrost meeuings scheculedGET det meetinorost det link to task>POST Create Contact with AssociationHuospotv teration run HSGET Read copyeg. An error occurred.ss. successful operationv teration run Search HSPOSt search contact by emall eopy> Journal & webhoooks v4› OAuth› Properties• DECCADOLSEARCHpost coarch cantant hu nhanoPOST search contact by emailPOST search meetingsPOST search notesPost Search callc vaPOST Search related meetinas v3POST search deals› © Critical System Resource Limitu Iteration run Search HS • 20 VUs • May 11, 2026 14:08:52 (1 min) • Fixed profileSummaryTotal requests sent ©Requests/second ©Avg. response time ©6.470107A07156 ms% 10014•08•5614:09:02Dorformonso dotolle fortotol durotinnPOST search contact by email Copysbeen stopped to prevent systenSustem Resource WarningSustem resources are constrained. Thesystem mav not be able to generate the loadeded for this test and the cest is likely toe Connect Git = Concole 5.l Termina14•09•146.470GET ReadP90 ©174 ms105.99GET Read CopyP95 ©202 msP99 ©371ms0 Iteration run Search HSError % ©0,00Failure % ©0.00Preparation for Refi... in 47 m100% C4• Mon 11 May 14:13:07D Iteration run Search HSPeak CPU % ©Peak Memory % ©100.0 %18.9 %Filter bv requestsvAva. response591 ms 140 req/s2960.0014•09•26Failure %0.0014.09-2214•09•2814.09-4414•09•50- Requests/second - Ava. response - Error % — Virtual users ..• CPU % •.• Memory %Resp. time (Ava. ms)Min (ms)Max ms)947202371Globals Vault Tools?000...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18364
|
792
|
39
|
2026-05-11T11:13:08.428470+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497988428_m1.jpg...
|
Notion Calendar
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ab)A Preparation for Refi... in 47 mDEV (docker)-zshDOCKERO ₴1DEV (docker)$2APP (-zsh)H3eventsroutesviewsJ1minny-worker-processing-2:71munny-worker-processing-2_00: stoppedJiminny-worker-processing-3:7iminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5: jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2: jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny: debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and run jiminny:debug observeRateLimit toinspect cache state.root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all84-zshX5100%8• Mon 11 May 14:13:07181-zsh+screenpipe"O 8861.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
NULL
|
2641555853771950062
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ab)A Preparation for Refi... in 47 mDEV (docker)-zshDOCKERO ₴1DEV (docker)$2APP (-zsh)H3eventsroutesviewsJ1minny-worker-processing-2:71munny-worker-processing-2_00: stoppedJiminny-worker-processing-3:7iminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedjiminny-worker-processing-5: jiminny-worker-processing-5_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2: jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan jiminny: debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and run jiminny:debug observeRateLimit toinspect cache state.root@docker_lamp_1:/home/jiminny# php artisan optimize:clear && supervisorctl restart all84-zshX5100%8• Mon 11 May 14:13:07181-zsh+screenpipe"O 8861.32ms DONE1.13ms DONE15.28ms DONEDEV...
|
18362
|
NULL
|
NULL
|
NULL
|
|
18365
|
793
|
37
|
2026-05-11T11:13:11.300408+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778497991300_m2.jpg...
|
Notion Calendar
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PostmanroledeyVIewWindowmelp© BatchSyncCollectolT PostmanroledeyVIewWindowmelp© BatchSyncCollectolT SyncCrmEntitiesTrait.phplwaealotnttevileebeeale balchsynckealssec clientone© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service,onoC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Acceccors> D ConfigD DTO• M SiltersD Jobs. M ProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph(c) LocalSearch.php• LocalSearchInterfa© RemoteSearch.phpc) Service.phpv D Listeners© ConvertLeadActivitc) PurceLookuocache> M Metadata> Miarationi> M Pipedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpclass Cllent extends Baseclient 1mpLen nubu1etunction 1shubspotratelim1t11 $e instanceof \GuzzleHtreturn (int) $e->getCodeOrecurn talsepubunc function parseRetrvAftercTh1f method exists(Se.Sheadens = se->detResponsesvalue = Sheadens|Retry-if (is arnav(Svalue)) {Svalue = Svalueiol 2:if (is_numeric($value)) 1return Gint) Svalue:Smessage = strtolower(Se->getMif (str_contains(Smessage, 'daif (str_ contains(Smessage.if (str_ contains(Smessaqe.return 1Sthis->lo0->warningl' Hubsoothl"Preparation tor Kell... In 47m100% Lz• Mon 11 May 14:13:10• SearchYour team is now on the Free olan with 1 admin. You retain editina access and other members are read-onlv. View team nermissions to see who can edit or unarade to restore collaborationRun orderv COLLECtIONSs9: An error occurreaCRM Owners• CRM Pipelines› Dealsengagements>D OLD ENGAGEMENTSGet list meetingsPOST search modified companiesrosl search tasksGET read callGeT list callsrost meeuings scheculedGET det meetinorost det link to task>POST Create Contact with AssociationHuospotv teration run HSGET Read copyeg. An error occurred.se. successful operationv teration run Search HSPOSt search contact by emall eopy> Journal & webhoooks v4› OAuth› Properties• DECCADOLSEARCHpost coarch cantant hu nhanoPOST search contact by emailPOST search meetingsPOST search notesPost Search callc vaPOST Search related meetinas v3POST search deals› © Critical System Resource LimitRun SequencePosT search contact by email Copys been stopped to prevent systenSustem Resource WarningSustem resources are constrained. Thesystem may not be able to generate the loadeded for this test and the cest is likely toe Connect Git = Concole 5.l TerminaGET Read CopyDeselect AllGET https:/lapi.hubapi.comSelect All Reset0 Iteration run Search HSPOSt search contact by emaiFunctional PerformanceChoose how to run vour pertormance test• In the appVia the elSet up vour performance testLoad profile ©Virtual users ©FixedD RunnerNo environmentTest duration20 virtual users run for 1 minute, each executing all requests sequentiallvData file GSelect file>Pass test if... ©public function parseMessage(ThrovGlobals Vault Tools?000...
|
NULL
|
-1796276705526139835
|
NULL
|
visual_change
|
ocr
|
NULL
|
PostmanroledeyVIewWindowmelp© BatchSyncCollectolT PostmanroledeyVIewWindowmelp© BatchSyncCollectolT SyncCrmEntitiesTrait.phplwaealotnttevileebeeale balchsynckealssec clientone© ClosedDealStagesS © RateLimitException.phpDealrielasservice.gc)Decorateacuivilv.or© FieldDefinitions.phrC) FieldT vpeconvertee Hubspotclientinterc) Hubspotlokenman© PayloadBuilder.phpC) RemotecrmobiectrP ResponseNormalizec) Service,onoC)SvncFieldAction.onC) SvncRelatedActivitC) WebhookSvncBatclv MintearationAorM Acceccors> D ConfigD DTO• M SiltersD Jobs. M ProspectSearchStraW sevice lraits© DataClient.php© DecorateActivity.ph(c) LocalSearch.php• LocalSearchInterfa© RemoteSearch.phpc) Service.phpv D Listeners© ConvertLeadActivitc) PurceLookuocache> M Metadata> Miarationi> M Pipedrivev Salesforce• D FieldsM OnnortunitvMatcheMOnnortunitvSvneStM ProsneetSearchStr.• M ServiceTraitcC) Client nhr© DecorateActivity.ph. Delete@biectsTrait© FieldDefinitions.php© PayloadBuilder.php© Profile.php© QueryBuilder.phpclass Cllent extends Baseclient 1mpLen nubu1etunction 1shubspotratelim1t11 $e instanceof \GuzzleHtreturn (int) $e->getCodeOrecurn talsepubunc function parseRetrvAftercTh1f method exists(Se.Sheadens = se->detResponsesvalue = Sheadens|Retry-if (is arnav(Svalue)) {Svalue = Svalueiol 2:if (is_numeric($value)) 1return Gint) Svalue:Smessage = strtolower(Se->getMif (str_contains(Smessage, 'daif (str_ contains(Smessage.if (str_ contains(Smessaqe.return 1Sthis->lo0->warningl' Hubsoothl"Preparation tor Kell... In 47m100% Lz• Mon 11 May 14:13:10• SearchYour team is now on the Free olan with 1 admin. You retain editina access and other members are read-onlv. View team nermissions to see who can edit or unarade to restore collaborationRun orderv COLLECtIONSs9: An error occurreaCRM Owners• CRM Pipelines› Dealsengagements>D OLD ENGAGEMENTSGet list meetingsPOST search modified companiesrosl search tasksGET read callGeT list callsrost meeuings scheculedGET det meetinorost det link to task>POST Create Contact with AssociationHuospotv teration run HSGET Read copyeg. An error occurred.se. successful operationv teration run Search HSPOSt search contact by emall eopy> Journal & webhoooks v4› OAuth› Properties• DECCADOLSEARCHpost coarch cantant hu nhanoPOST search contact by emailPOST search meetingsPOST search notesPost Search callc vaPOST Search related meetinas v3POST search deals› © Critical System Resource LimitRun SequencePosT search contact by email Copys been stopped to prevent systenSustem Resource WarningSustem resources are constrained. Thesystem may not be able to generate the loadeded for this test and the cest is likely toe Connect Git = Concole 5.l TerminaGET Read CopyDeselect AllGET https:/lapi.hubapi.comSelect All Reset0 Iteration run Search HSPOSt search contact by emaiFunctional PerformanceChoose how to run vour pertormance test• In the appVia the elSet up vour performance testLoad profile ©Virtual users ©FixedD RunnerNo environmentTest duration20 virtual users run for 1 minute, each executing all requests sequentiallvData file GSelect file>Pass test if... ©public function parseMessage(ThrovGlobals Vault Tools?000...
|
18363
|
NULL
|
NULL
|
NULL
|